extern long pr_RemoveUserFromGroup();
static char tbl_buf[1024];
-static char hostname[64];
main(argc, argv)
char **argv;
if (bstate != 0) {
/* Reactivating a user; get his group list */
- gethostname(hostname, sizeof(hostname));
- code = mr_connect(hostname);
- if (!code) code = mr_auth("afs.incr");
+ code = moira_connect();
if (code) {
critical_alert("incremental",
"Error contacting Moira server to retrieve grouplist of user %s: %s",
critical_alert("incremental",
"Couldn't retrieve membership of user %s: %s",
after[U_NAME], error_message(code));
- mr_disconnect();
+ moira_disconnect();
}
return;
}
/* We need to make sure the group is properly populated */
if (beforec < L_ACTIVE) return;
- gethostname(hostname, sizeof(hostname));
- code = mr_connect(hostname);
- if (!code) code = mr_auth("afs.incr");
+ code = moira_connect();
if (code) {
critical_alert("incremental",
"Error contacting Moira server to resolve %s: %s",
av[1] = after[L_NAME];
get_members(2, av, after[L_NAME]);
- mr_disconnect();
+ moira_disconnect();
return;
}
}
return;
/* Check whether the member being added is an active user */
- gethostname(hostname, sizeof(hostname));
- code = mr_connect(hostname);
- if (!code) code = mr_auth("afs.incr");
+ code = moira_connect();
if (!code) code = mr_query("get_user_by_login", 1, &member,
check_user, &ustate);
if (code) {
"Error contacting Moira server to lookup user %s: %s",
member, error_message(code));
}
- mr_disconnect();
+ moira_disconnect();
if (!code && ustate!=1 && ustate!=2) return; /* inactive user */
}
sleep(60);
}
}
+
+
+static int mr_connections=0;
+
+moira_connect()
+{
+ static char hostname[64];
+ long code;
+
+ if (!mr_connections++) {
+ gethostname(hostname, sizeof(hostname));
+ code = mr_connect(hostname);
+ if (!code) code = mr_auth("afs.incr");
+ return code;
+ }
+ return 0;
+}
+
+moira_disconnect()
+{
+ if (!--mr_connections) {
+ mr_disconnect();
+ }
+ return 0;
+}