]> andersk Git - moira.git/blobdiff - incremental/afs.c
added hosttable stuff
[moira.git] / incremental / afs.c
index 7654288b5a4133ccf008fa77e73f208a1d62b4b6..98ffd4a261459188a45ffc409cd4093bc5ad0e5c 100644 (file)
@@ -78,12 +78,13 @@ int argc;
     for (i = getdtablesize() - 1; i > 2; i--)
       close(i);
 
+    whoami = ((whoami = rindex(argv[0], '/')) ? whoami++ : argv[0]);
+
     table = argv[1];
     beforec = atoi(argv[2]);
     before = &argv[4];
     afterc = atoi(argv[3]);
     after = &argv[4 + beforec];
-    whoami = argv[0];
 
     setlinebuf(stdout);
 
@@ -331,6 +332,18 @@ int afterc;
 }
 
 
+    
+#define LM_EXTRA_ACTIVE          (LM_END)
+#define LM_EXTRA_PUBLIC   (LM_END+1)
+#define LM_EXTRA_HIDDEN   (LM_END+2)
+#define LM_EXTRA_MAILLIST (LM_END+3)
+#define LM_EXTRA_GROUP    (LM_END+4)
+#define LM_EXTRA_GID      (LM_END+5)
+#define LM_EXTRA_END      (LM_END+6)
+
+#define LM_EXTRA_OLD_GROUP (LM_END)
+#define LM_EXTRA_OLD_END   (LM_END+1)
+
 do_member(before, beforec, after, afterc)
 char **before;
 int beforec;
@@ -339,15 +352,27 @@ int afterc;
 {
     int code;
     char *p;
-    
-    if ((beforec < 4 || !atoi(before[LM_END])) &&
-       (afterc < 4 || !atoi(after[LM_END])))
-       return;
 
-    if (afterc)
-       edit_group(1, after[LM_LIST], after[LM_TYPE], after[LM_MEMBER]);
-    if (beforec)
+    if (afterc) {
+       if (afterc < LM_EXTRA_OLD_END) {
+           return;
+       } else if (afterc < LM_EXTRA_END) {
+           if (!atoi(after[LM_EXTRA_OLD_GROUP])) return;
+       } else
+         if (!atoi(after[LM_EXTRA_ACTIVE]) && !atoi(after[LM_EXTRA_GROUP]))
+           return;
+       
+       edit_group(1, after[LM_LIST], after[LM_TYPE], after[LM_MEMBER]);
+    } else if (beforec) {
+       if (beforec < LM_EXTRA_OLD_END) {
+           return;
+       } else if (beforec < LM_EXTRA_END) {
+           if (!atoi(before[LM_EXTRA_OLD_GROUP])) return;
+       } else
+         if (!atoi(before[LM_EXTRA_ACTIVE]) && !atoi(before[LM_EXTRA_GROUP]))
+           return;
        edit_group(0, before[LM_LIST], before[LM_TYPE], before[LM_MEMBER]);
+    }
 }
 
 
@@ -469,6 +494,7 @@ add_user_lists(ac, av, user)
 {
     if (atoi(av[L_ACTIVE]) && atoi(av[L_GROUP]))       /* active group ? */
        edit_group(1, av[L_NAME], "USER", user);
+    return 0;
 }
 
 
@@ -478,6 +504,7 @@ add_list_members(ac, av, group)
     char *group;
 {
     edit_group(1, group, av[0], av[1]);
+    return 0;
 }
 
 
@@ -487,6 +514,7 @@ check_user(ac, av, ustate)
     int *ustate;
 {
     *ustate = atoi(av[U_STATE]);
+    return 0;
 }
 
 
@@ -538,6 +566,7 @@ edit_group(op, group, type, member)
     com_err(whoami, 0, "%s %s %s group %s",
           (op ? "Adding" : "Removing"), member,
           (op ? "to" : "from"), group);
+    code = 0;
     code=pr_try(op ? pr_AddToGroup : pr_RemoveUserFromGroup, member, buf);
     if (code) {
        if (op==1 && code == PRIDEXIST) return; /* Already added */
@@ -556,7 +585,13 @@ edit_group(op, group, type, member)
                               "Error contacting Moira server to lookup user %s: %s",
                               member, error_message(code));
            }
-           moira_disconnect();
+
+           /* We don't use moira_disconnect()
+            * because we may already be in the routine.
+            */
+           mr_disconnect();
+           mr_connections--;
+
            if (!code && ustate!=1 && ustate!=2) return; /* inactive user */
            code = PRNOENT;
        }
@@ -582,7 +617,7 @@ long pr_try(fn, a1, a2, a3, a4, a5, a6, a7, a8)
 #endif
 
     check_afs();
-    
+
     if (initd) {
        code=pr_Initialize(0, AFSCONF_CLIENTNAME, 0);
     } else {
@@ -657,8 +692,12 @@ moira_connect()
     long code;
 
     if (!mr_connections++) {
+#ifdef DEBUG
+       code = mr_connect("moira");
+#else
        gethostname(hostname, sizeof(hostname));
        code = mr_connect(hostname);
+#endif
        if (!code) code = mr_auth("afs.incr");
        return code;    
     }
This page took 0.034053 seconds and 4 git commands to generate.