]> andersk Git - moira.git/commitdiff
Preserve hidden status of groups
authorprobe <probe>
Sun, 7 Jun 1992 04:20:08 +0000 (04:20 +0000)
committerprobe <probe>
Sun, 7 Jun 1992 04:20:08 +0000 (04:20 +0000)
afssync/sync.qc
incremental/afs.c

index ed6606d215a20a0a044c8801fc7e19f82e2dd3db..f443c34003227a59268a92e6c74cc217b1dd06f4 100644 (file)
@@ -9,16 +9,16 @@
 #include <mit-copyright.h>
 #include <stdio.h>
 #include <sys/file.h>
+
 #include <rx/xdr.h>
-#include <afs/ptint.h>
-#include <afs/ptserver.h>
-#include <afs/pterror.h>
+#include "ptint.h"
+#include "ptserver.h"
+#include "pterror.h"
+
 #include <moira.h>
 #include <moira_site.h>
 #include <ctype.h>
 
-#define USERSMS 14487
-
 #define min(x,y)       ((x) < (y) ? (x) : (y))
 struct hash *users = NULL;
 char *whoami = "sync";
@@ -52,10 +52,13 @@ char **argv;
 ##  begin transaction
 
     do_passwd();
+#if 0
+#define USERSMS 14487
     status = PR_AddToGroup(NULL, USERSMS, SYSADMINID);
     if (status) {
        prserror(status, "adding MR to system:administrators", 0, 0);
     }
+#endif
     do_groups();
 
 ##  end transaction
@@ -164,7 +167,7 @@ do_groups()
     struct hash *groups;
     long u, g, status;
 ##  char name[33], namebuf[128];
-##  int gid, id, lid;
+##  int gid, id, lid, hide;
 
     fprintf(stderr, "Doing groups\n");
 
@@ -178,14 +181,25 @@ do_groups()
 ##  retrieve (name = l.modtime) where l.list_id = 0
 ##  retrieve (name = users.modtime) where users.users_id = 0
 
-##  retrieve (name = l.#name, gid = l.#gid, lid = l.list_id)
+##  retrieve (name = l.#name, gid = l.#gid, lid = l.list_id, hide = l.hidden)
 ##     where l.group != 0 and l.active != 0 {
            strtrim(name);
            sprintf(namebuf, "system:%s", name);
            hash_store(groups, lid, -gid);
            status = PR_INewEntry(NULL, namebuf, -gid, SYSADMINID);
            if (status)
-             prserror(status, "adding list %s gid %d", namebuf, -gid);
+               prserror(status, "adding list %s gid %d", namebuf, -gid);
+           else {
+               if (hide) {
+                   status = PR_SetFieldsEntry
+                       (NULL/*call*/, -gid,
+                        PR_SF_ALLBITS/*mask*/,
+                        PRP_STATUS_MEM >> PRIVATE_SHIFT /*flags*/,
+                        0/*ngroups*/, 0/*nusers*/, 0/*spare1*/, 0/*spare2*/);
+               }
+               if (status)
+                   prserror(status, "setting flags on list %s", namebuf);
+           }
 ##  }
 
 
index 80e73245eb4cf4dcdbde9fe9dabbbceddf8f5c31..b38347bc023e5eb4eeae80b34ef5a63078b11073 100644 (file)
@@ -180,22 +180,25 @@ int beforec;
 char **after;
 int afterc;
 {
-    int agid, bgid;
+    register int agid, bgid;
+    int ahide, bhide;
     long code, id;
     char hostname[64];
     char g1[PR_MAXNAMELEN], g2[PR_MAXNAMELEN];
     char *av[2];
 
     agid = bgid = 0;
-    if (beforec > L_GID && atoi(before[L_ACTIVE]) && atoi(before[L_GROUP]))
+    if (beforec > L_GID && atoi(before[L_ACTIVE]) && atoi(before[L_GROUP])) {
        bgid = atoi(before[L_GID]);
-    if (afterc > L_GID && atoi(after[L_ACTIVE]) && atoi(after[L_GROUP]))
+       bhide = atoi(before[L_HIDDEN]);
+    }
+    if (afterc > L_GID && atoi(after[L_ACTIVE]) && atoi(after[L_GROUP])) {
        agid = atoi(after[L_GID]);
+       ahide = atoi(after[L_HIDDEN]);
+    }
 
     if (agid == 0 && bgid == 0)                        /* Not active groups */
        return;
-    if (agid == bgid && !strcmp(after[L_NAME], before[L_NAME]))
-       return;                                 /* No change */
 
     code=pr_Initialize(1, AFSCONF_CLIENTNAME, 0);
     if (code) {
@@ -205,17 +208,30 @@ int afterc;
     }
 
     if (agid && bgid) {
-       /* Only a modify is required */
-       strcpy(g1, "system:");
-       strcpy(g2, "system:");
-       strcat(g1, before[L_NAME]);
-       strcat(g2, after[L_NAME]);
-       code = pr_ChangeEntry(g1, g2, (agid==bgid) ? 0 : -agid, "");
-       if (code) {
-           critical_alert("incremental",
-                          "Couldn't change group %s (id %d) to %s (id %d): %s",
-                          before[L_NAME], -bgid, after[L_NAME], -agid,
-                          error_message(code));
+       if (strcmp(after[L_NAME], before[L_NAME])) {
+           /* Only a modify is required */
+           strcpy(g1, "system:");
+           strcpy(g2, "system:");
+           strcat(g1, before[L_NAME]);
+           strcat(g2, after[L_NAME]);
+           code = pr_ChangeEntry(g1, g2, (agid==bgid) ? 0 : -agid, "");
+           if (code) {
+               critical_alert("incremental",
+                              "Couldn't change group %s (id %d) to %s (id %d): %s",
+                              before[L_NAME], -bgid, after[L_NAME], -agid,
+                              error_message(code));
+           }
+       }
+       if (ahide != bhide) {
+           code = pr_SetFieldsEntry
+               (-agid, PR_SF_ALLBITS,
+                (ahide ? PRP_STATUS_MEM : PRP_GROUP_DEFAULT) >> PRIVATE_SHIFT,
+                0 /*ngroups*/, 0 /*nusers*/);
+           if (code) {
+               critical_alert("incremental",
+                              "Couldn't set flags of group %s: %s",
+                              after[L_NAME], error_message(code));
+           }
        }
        return;
     }
@@ -240,6 +256,17 @@ int afterc;
                           after[L_NAME], id, error_message(code));
            return;
        }
+       if (ahide) {
+           code = pr_SetFieldsEntry
+               (-agid, PR_SF_ALLBITS,
+                (ahide ? PRP_STATUS_MEM : PRP_GROUP_DEFAULT) >> PRIVATE_SHIFT,
+                0 /*ngroups*/, 0 /*nusers*/);
+           if (code) {
+               critical_alert("incremental",
+                              "Couldn't set flags of group %s: %s",
+                              after[L_NAME], error_message(code));
+           }
+       }
 
        /* We need to make sure the group is properly populated */
        if (beforec < L_ACTIVE || atoi(before[L_ACTIVE]) == 0) return;
This page took 0.068491 seconds and 5 git commands to generate.