1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

s3: Add processes_exist

This commit is contained in:
Volker Lendecke 2011-10-26 12:18:21 +02:00 committed by Volker Lendecke
parent c5cfc83a3e
commit ba0171f724
2 changed files with 68 additions and 0 deletions

View File

@ -512,6 +512,8 @@ int interpret_protocol(const char *str,int def);
char *automount_lookup(TALLOC_CTX *ctx, const char *user_name);
char *automount_lookup(TALLOC_CTX *ctx, const char *user_name);
bool process_exists(const struct server_id pid);
bool processes_exist(const struct server_id *pids, int num_pids,
bool *results);
const char *uidtoname(uid_t uid);
char *gidtoname(gid_t gid);
uid_t nametouid(const char *name);

View File

@ -657,6 +657,72 @@ bool process_exists(const struct server_id pid)
#endif
}
bool processes_exist(const struct server_id *pids, int num_pids,
bool *results)
{
struct server_id *remote_pids = NULL;
int *remote_idx = NULL;
bool *remote_results = NULL;
int i, num_remote_pids;
bool result = false;
remote_pids = talloc_array(talloc_tos(), struct server_id, num_pids);
if (remote_pids == NULL) {
goto fail;
}
remote_idx = talloc_array(talloc_tos(), int, num_pids);
if (remote_idx == NULL) {
goto fail;
}
remote_results = talloc_array(talloc_tos(), bool, num_pids);
if (remote_results == NULL) {
goto fail;
}
num_remote_pids = 0;
for (i=0; i<num_pids; i++) {
if (procid_is_me(&pids[i])) {
results[i] = true;
continue;
}
if (procid_is_local(&pids[i])) {
results[i] = ((kill(pids[i].pid,0) == 0) ||
(errno != ESRCH));
continue;
}
remote_pids[num_remote_pids] = pids[i];
remote_idx[num_remote_pids] = i;
num_remote_pids += 1;
}
if (num_remote_pids != 0) {
#ifdef CLUSTER_SUPPORT
if (!ctdb_processes_exist(messaging_ctdbd_connection(),
remote_pids, num_remote_pids,
remote_results)) {
goto fail;
}
#else
for (i=0; i<num_remote_pids; i++) {
remote_results[i] = false;
}
#endif
for (i=0; i<num_remote_pids; i++) {
results[remote_idx[i]] = remote_results[i];
}
}
result = true;
fail:
TALLOC_FREE(remote_results);
TALLOC_FREE(remote_idx);
TALLOC_FREE(remote_pids);
return result;
}
/*******************************************************************
Convert a uid into a user name.
********************************************************************/