Beispiel #1
0
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() */
Beispiel #2
0
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() */
Beispiel #3
0
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() */
Beispiel #4
0
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() */