s3: Add serverids_exist
authorVolker Lendecke <vl@samba.org>
Wed, 26 Oct 2011 11:36:56 +0000 (13:36 +0200)
committerVolker Lendecke <vlendec@samba.org>
Thu, 27 Oct 2011 18:28:31 +0000 (20:28 +0200)
source3/include/serverid.h
source3/lib/serverid.c

index 62bf6382140bac1deaf8e2fbbc40926a82fd96d5..babb21b8f77fe2a8f15a1861acad7211bd2c914c 100644 (file)
@@ -43,6 +43,11 @@ bool serverid_register_msg_flags(const struct server_id id, bool do_reg,
  */
 bool serverid_exists(const struct server_id *id);
 
+/*
+ * Check existence of a list of server ids
+ */
+bool serverids_exist(const struct server_id *ids, int num_ids, bool *results);
+
 /*
  * Walk the list of server_ids registered
  */
index b3b294f893420bff5e5d4e985deb075207cf967e..274b44b86fbabb36b3ea685ffeab795ae9486ce8 100644 (file)
@@ -273,6 +273,40 @@ bool serverid_exists(const struct server_id *id)
        return state.exists;
 }
 
+bool serverids_exist(const struct server_id *ids, int num_ids, bool *results)
+{
+       struct db_context *db;
+       int i;
+
+       if (!processes_exist(ids, num_ids, results)) {
+               return false;
+       }
+
+       db = serverid_db();
+       if (db == NULL) {
+               return false;
+       }
+
+       for (i=0; i<num_ids; i++) {
+               struct serverid_exists_state state;
+               struct serverid_key key;
+               TDB_DATA tdbkey;
+
+               if (!results[i]) {
+                       continue;
+               }
+
+               serverid_fill_key(&ids[i], &key);
+               tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
+
+               state.id = &ids[i];
+               state.exists = false;
+               dbwrap_parse_record(db, tdbkey, server_exists_parse, &state);
+               results[i] = state.exists;
+       }
+       return true;
+}
+
 static bool serverid_rec_parse(const struct db_record *rec,
                               struct server_id *id, uint32_t *msg_flags)
 {