[Cvs-nserver-commits] CVS: cvs-nserver/acl branch-acl.c,1.1.2.19,1.1.2.20
Brought to you by:
tyranny
From: Alexey M. <mo...@us...> - 2002-06-20 15:55:51
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv18317 Modified Files: Tag: NCLI-1-11-1 branch-acl.c Log Message: File permission aliases ('ci','co') are understood now Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.19 retrieving revision 1.1.2.20 diff -u -d -r1.1.2.19 -r1.1.2.20 --- branch-acl.c 13 Jun 2002 09:20:44 -0000 1.1.2.19 +++ branch-acl.c 20 Jun 2002 15:55:43 -0000 1.1.2.20 @@ -229,43 +229,73 @@ return perm; } +static const char *BRANCH_PERM_NONE_STRING = "none"; +static const char *BRANCH_PERM_CHECKOUT_STRING = "checkout"; +static const char *BRANCH_PERM_CHECKOUT_ALIAS = "co"; +static const char *BRANCH_PERM_CHECKIN_STRING = "checkin"; +static const char *BRANCH_PERM_CHECKIN_ALIAS = "ci"; +static const char *BRANCH_PERM_CHECKOUTIN_STRING = "checkout,checkin"; +static const char *BRANCH_PERM_INVALID_STRING = "invalid"; + int parse_branch_permissions (char *perm_str) { + size_t len; + branch_permission res = branch_perm_none; - if (strcmp(perm_str, "checkin") == 0) - return branch_perm_checkin; - - if (strcmp(perm_str, "checkout") == 0) - return branch_perm_checkout; - - if (strcmp(perm_str, "checkin,checkout") == 0) - return branch_perm_checkin | branch_perm_checkout; + if (strcmp(perm_str, BRANCH_PERM_NONE_STRING) == 0) + return branch_perm_none; + + if (strncmp(perm_str, BRANCH_PERM_CHECKOUT_STRING, + (len = strlen(BRANCH_PERM_CHECKOUT_STRING))) == 0 || + strncmp(perm_str, BRANCH_PERM_CHECKOUT_ALIAS, + (len = strlen(BRANCH_PERM_CHECKOUT_ALIAS)))==0) + res |= branch_perm_checkout; + else if (strncmp(perm_str, BRANCH_PERM_CHECKIN_STRING, + (len = strlen(BRANCH_PERM_CHECKIN_STRING))) == 0 || + strncmp(perm_str, BRANCH_PERM_CHECKIN_ALIAS, + (len = strlen(BRANCH_PERM_CHECKIN_ALIAS)))==0) + res |= branch_perm_checkin; + else + return branch_perm_invalid; - if (strcmp(perm_str, "checkout,checkin") == 0) - return branch_perm_checkin | branch_perm_checkout; + perm_str += len; - if (strcmp(perm_str, "none") == 0) - return branch_perm_none; + if (*perm_str == '\0') + return res; + if (*perm_str != ',') + return branch_perm_invalid; + perm_str++; - return branch_perm_invalid; + if ((!(res & branch_perm_checkout)) && + (strcmp(perm_str, BRANCH_PERM_CHECKOUT_STRING) == 0 || + strcmp(perm_str, BRANCH_PERM_CHECKOUT_ALIAS)==0)) + res |= branch_perm_checkout; + else if ((!(res & branch_perm_checkin)) && + (strcmp(perm_str, BRANCH_PERM_CHECKIN_STRING) == 0 || + strcmp(perm_str, BRANCH_PERM_CHECKIN_ALIAS)==0)) + res |= branch_perm_checkin; + else + return branch_perm_invalid; + + return res; } const char * branch_permissions_string (int perm) { if (perm == branch_perm_none) - return "none"; + return BRANCH_PERM_NONE_STRING; if (perm == branch_perm_checkin) - return "checkin"; + return BRANCH_PERM_CHECKIN_STRING; if (perm == branch_perm_checkout) - return "checkout"; + return BRANCH_PERM_CHECKOUT_STRING; if (perm == (branch_perm_checkin | branch_perm_checkout)) - return "checkin,checkout"; + return BRANCH_PERM_CHECKOUTIN_STRING; - return "invalid"; + return BRANCH_PERM_INVALID_STRING; } |