summaryrefslogtreecommitdiffstats
ModeNameSize
-rw-r--r--.editorconfig168logstatsplain
d---------.github246logstatsplain
-rw-r--r--.gitignore545logstatsplain
-rw-r--r--.mailmap895logstatsplain
d---------.tx34logstatsplain
-rw-r--r--AUTHORS.md7468logstatsplain
-rw-r--r--CHANGELOG.md12696logstatsplain
-rw-r--r--CONTRIBUTING.md4826logstatsplain
-rw-r--r--COPYING34520logstatsplain
-rw-r--r--Makefile6252logstatsplain
-rw-r--r--README.md4741logstatsplain
d---------appinfo74logstatsplain
d---------bin62logstatsplain
-rw-r--r--composer.json2118logstatsplain
-rw-r--r--composer.lock112573logstatsplain
d---------css351logstatsplain
d---------docs328logstatsplain
d---------img1088logstatsplain
d---------js623logstatsplain
d---------l10n6378logstatsplain
d---------lib550logstatsplain
-rw-r--r--phpstan.neon.dist359logstatsplain
-rw-r--r--phpunit.xml980logstatsplain
-rw-r--r--psalm.xml1296logstatsplain
d---------screenshots216logstatsplain
d---------templates712logstatsplain
d---------tests118logstatsplain
lass="k">sizeof(*groups_bygid)); while (getgrouplist(user, base, groups_bygid, &ngroups) == -1) { if (retry++ > 0) fatal("getgrouplist: groups list too small"); groups_bygid = xreallocarray(groups_bygid, ngroups, sizeof(*groups_bygid)); } groups_byname = xcalloc(ngroups, sizeof(*groups_byname)); for (i = 0, j = 0; i < ngroups; i++) if ((gr = getgrgid(groups_bygid[i])) != NULL) groups_byname[j++] = xstrdup(gr->gr_name); free(groups_bygid); return (ngroups = j); } /* * Return 1 if one of user's groups is contained in groups. * Return 0 otherwise. Use match_pattern() for string comparison. */ int ga_match(char * const *groups, int n) { int i, j; for (i = 0; i < ngroups; i++) for (j = 0; j < n; j++) if (match_pattern(groups_byname[i], groups[j])) return 1; return 0; } /* * Return 1 if one of user's groups matches group_pattern list. * Return 0 on negated or no match. */ int ga_match_pattern_list(const char *group_pattern) { int i, found = 0; for (i = 0; i < ngroups; i++) { switch (match_usergroup_pattern_list(groups_byname[i], group_pattern)) { case -1: return 0; /* Negated match wins */ case 0: continue; case 1: found = 1; } } return found; } /* * Free memory allocated for group access list. */ void ga_free(void) { int i; if (ngroups > 0) { for (i = 0; i < ngroups; i++) free(groups_byname[i]); ngroups = 0; free(groups_byname); groups_byname = NULL; } }