int MGroupFind( char *GName, /* I */ mgcred_t **GP) /* O */ { int gindex; unsigned long hashkey; mgcred_t *Gtmp; const char *FName = "MGroupFind"; DBG(7,fSTRUCT) DPrint("%s(%s,G)\n", FName, GName); if (GP != NULL) *GP = NULL; if ((GName == NULL) || (GName[0] == '\0')) { return(FAILURE); } hashkey = MAX(1,MUGetHash(GName) % MAX_MGROUP); for (gindex = hashkey; gindex < MAX_MGROUP + MAX_MHBUF; gindex++) { Gtmp = &MGroup[gindex]; if (Gtmp->Name[0] == '\0') { if (GP != NULL) *GP = Gtmp; break; } if ((hashkey != Gtmp->Key) || (strcmp(Gtmp->Name,GName))) { continue; } /* group found */ if (GP != NULL) *GP = Gtmp; return(SUCCESS); } /* END for (gindex) */ return(FAILURE); } /* END MGroupFind() */
int MAcctFind( char *AccountName, mgcred_t **A) { /* If found, return success with A pointing to Account. */ /* If not found, return failure with A pointing to */ /* first free Account if available, A set to NULL otherwise */ int aindex; int Key; char AName[MAX_MNAME]; DBG(5, fSTRUCT) DPrint("MAcctFind(%s,A)\n", (AccountName == NULL) ? "NULL" : AccountName); if (A != NULL) *A = NULL; if ((AccountName == NULL) || (AccountName[0] == '\0')) strcpy(AName, NONE); else MUStrCpy(AName, AccountName, sizeof(AName)); Key = (int)(MUGetHash(AName) % MAX_MACCT); for (aindex = Key; aindex < MAX_MACCT + MAX_MHBUF; aindex++) { if (MAcct[aindex].Name[0] == '\0') { if (A != NULL) *A = &MAcct[aindex]; break; } if (strcmp(MAcct[aindex].Name, AName) != 0) continue; /* Account found */ if (A != NULL) *A = &MAcct[aindex]; return (SUCCESS); } /* END for (aindex) */ return (FAILURE); } /* END MAcctFind() */
int MGroupAdd( char *GName, /* I */ mgcred_t **GP) /* O (optional) */ { int gindex; unsigned long hashkey; mgcred_t *Gtmp; const char *FName = "MGroupAdd"; DBG(6,fSTRUCT) DPrint("%s(%s,%s)\n", FName, (GName != NULL) ? "GName" : "NULL", (GP != NULL) ? "GP" : "NULL"); if ((GName == NULL) || (GName[0] == '\0')) { return(FAILURE); } if (GP != NULL) *GP = NULL; hashkey = MAX(1,MUGetHash(GName) % MAX_MGROUP); for (gindex = hashkey; gindex < MAX_MGROUP + MAX_MHBUF; gindex++) { Gtmp = &MGroup[gindex]; /* if group already in hash table */ if (hashkey == Gtmp->Key) { if (!strcmp(Gtmp->Name,GName)) { if (GP != NULL) *GP = Gtmp; return(SUCCESS); } } /* if empty slot found */ if (Gtmp->Key == 0) { /* setup new record */ if (GP != NULL) *GP = Gtmp; Gtmp->Key = hashkey; Gtmp->Index = gindex; MUStrCpy(Gtmp->Name,GName,sizeof(Gtmp->Name)); if (strcmp(GName,ALL) && strcmp(GName,NONE)) { /* update group record */ if (MSched.Mode != msmSim) MCPRestore(mcpGroup,GName,(void *)Gtmp); Gtmp->OID = MUGIDFromName(Gtmp->Name); DBG(5,fSTRUCT) DPrint("INFO: group %s added\n", GName); } else { /* NYI */ } return(SUCCESS); } } /* END for (gindex) */ /* end of table reached */ DBG(1,fSTRUCT) DPrint("ALERT: group table overflow. cannot add %s\n", GName); return(FAILURE); } /* END MGroupAdd() */
int MAcctAdd( char *AName, /* I */ mgcred_t **A) /* O (optional) */ { int aindex; int Key; mgcred_t *Atmp; const char *FName = "MAcctAdd"; DBG(5, fSTRUCT) DPrint("%s(%s,A)\n", FName, (AName != NULL) ? AName : "NULL"); if (A != NULL) *A = NULL; if ((AName == NULL) || (AName[0] == '\0')) { return (FAILURE); } Key = (int)(MUGetHash(AName) % MAX_MACCT); for (aindex = Key; aindex < MAX_MACCT + MAX_MHBUF; aindex++) { Atmp = &MAcct[aindex]; /* if account already in table */ if (!strcmp(Atmp->Name, AName)) { if (A != NULL) *A = Atmp; return (SUCCESS); } /* if empty slot found */ if (Atmp->Name[0] == '\0') { /* setup new record */ if (A != NULL) *A = Atmp; if (!strcmp(AName, NONE)) Atmp->Key = 0; else Atmp->Key = Key; MUStrCpy(Atmp->Name, AName, sizeof(Atmp->Name)); Atmp->Index = aindex; if (strcmp(AName, ALL) && strcmp(AName, NONE)) { /* update account record */ if (MSched.Mode != msmSim) MCPRestore(mcpAcct, Atmp->Name, (void *)Atmp); DBG(5, fSTRUCT) DPrint("INFO: account %s added\n", AName); } else { /* do nothing */ } return (SUCCESS); } } /* END for (aindex) */ /* end of table reached */ DBG(1, fSTRUCT) DPrint("ALERT: account table overflow (cannot add account %s)\n", AName); return (FAILURE); } /* END MAcctAdd() */