version 1.1.1.1, 2012/02/21 16:23:02
|
version 1.1.1.2, 2012/05/29 12:26:49
|
Line 62 alias_compare(const void *v1, const void *v2)
|
Line 62 alias_compare(const void *v1, const void *v2)
|
const struct alias *a1 = (const struct alias *)v1; |
const struct alias *a1 = (const struct alias *)v1; |
const struct alias *a2 = (const struct alias *)v2; |
const struct alias *a2 = (const struct alias *)v2; |
int res; |
int res; |
|
debug_decl(alias_compare, SUDO_DEBUG_ALIAS) |
|
|
if (v1 == NULL) |
if (v1 == NULL) |
res = -1; |
res = -1; |
Line 69 alias_compare(const void *v1, const void *v2)
|
Line 70 alias_compare(const void *v1, const void *v2)
|
res = 1; |
res = 1; |
else if ((res = strcmp(a1->name, a2->name)) == 0) |
else if ((res = strcmp(a1->name, a2->name)) == 0) |
res = a1->type - a2->type; |
res = a1->type - a2->type; |
return res; | debug_return_int(res); |
} |
} |
|
|
/* |
/* |
Line 82 alias_find(char *name, int type)
|
Line 83 alias_find(char *name, int type)
|
struct alias key; |
struct alias key; |
struct rbnode *node; |
struct rbnode *node; |
struct alias *a = NULL; |
struct alias *a = NULL; |
|
debug_decl(alias_find, SUDO_DEBUG_ALIAS) |
|
|
key.name = name; |
key.name = name; |
key.type = type; |
key.type = type; |
Line 94 alias_find(char *name, int type)
|
Line 96 alias_find(char *name, int type)
|
a = node->data; |
a = node->data; |
if (a->seqno == alias_seqno) { |
if (a->seqno == alias_seqno) { |
errno = ELOOP; |
errno = ELOOP; |
return NULL; | debug_return_ptr(NULL); |
} |
} |
a->seqno = alias_seqno; |
a->seqno = alias_seqno; |
} else { |
} else { |
errno = ENOENT; |
errno = ENOENT; |
} |
} |
return a; | debug_return_ptr(a); |
} |
} |
|
|
/* |
/* |
Line 112 alias_add(char *name, int type, struct member *members
|
Line 114 alias_add(char *name, int type, struct member *members
|
{ |
{ |
static char errbuf[512]; |
static char errbuf[512]; |
struct alias *a; |
struct alias *a; |
|
debug_decl(alias_add, SUDO_DEBUG_ALIAS) |
|
|
a = emalloc(sizeof(*a)); | a = ecalloc(1, sizeof(*a)); |
a->name = name; |
a->name = name; |
a->type = type; |
a->type = type; |
a->seqno = 0; | /* a->seqno = 0; */ |
list2tq(&a->members, members); |
list2tq(&a->members, members); |
if (rbinsert(aliases, a)) { |
if (rbinsert(aliases, a)) { |
snprintf(errbuf, sizeof(errbuf), _("Alias `%s' already defined"), name); |
snprintf(errbuf, sizeof(errbuf), _("Alias `%s' already defined"), name); |
alias_free(a); |
alias_free(a); |
return errbuf; | debug_return_str(errbuf); |
} |
} |
return NULL; | debug_return_str(NULL); |
} |
} |
|
|
/* |
/* |
Line 132 alias_add(char *name, int type, struct member *members
|
Line 135 alias_add(char *name, int type, struct member *members
|
void |
void |
alias_apply(int (*func)(void *, void *), void *cookie) |
alias_apply(int (*func)(void *, void *), void *cookie) |
{ |
{ |
|
debug_decl(alias_apply, SUDO_DEBUG_ALIAS) |
|
|
rbapply(aliases, func, cookie, inorder); |
rbapply(aliases, func, cookie, inorder); |
|
|
|
debug_return; |
} |
} |
|
|
/* |
/* |
* Returns TRUE if there are no aliases, else FALSE. | * Returns true if there are no aliases, else false. |
*/ |
*/ |
int | bool |
no_aliases(void) |
no_aliases(void) |
{ |
{ |
return rbisempty(aliases); | debug_decl(no_aliases, SUDO_DEBUG_ALIAS) |
| debug_return_bool(rbisempty(aliases)); |
} |
} |
|
|
/* |
/* |
Line 154 alias_free(void *v)
|
Line 162 alias_free(void *v)
|
struct member *m; |
struct member *m; |
struct sudo_command *c; |
struct sudo_command *c; |
void *next; |
void *next; |
|
debug_decl(alias_free, SUDO_DEBUG_ALIAS) |
|
|
efree(a->name); |
efree(a->name); |
for (m = a->members.first; m != NULL; m = next) { |
for (m = a->members.first; m != NULL; m = next) { |
Line 167 alias_free(void *v)
|
Line 176 alias_free(void *v)
|
efree(m); |
efree(m); |
} |
} |
efree(a); |
efree(a); |
|
|
|
debug_return; |
} |
} |
|
|
/* |
/* |
Line 177 alias_remove(char *name, int type)
|
Line 188 alias_remove(char *name, int type)
|
{ |
{ |
struct rbnode *node; |
struct rbnode *node; |
struct alias key; |
struct alias key; |
|
debug_decl(alias_remove, SUDO_DEBUG_ALIAS) |
|
|
key.name = name; |
key.name = name; |
key.type = type; |
key.type = type; |
Line 184 alias_remove(char *name, int type)
|
Line 196 alias_remove(char *name, int type)
|
errno = ENOENT; |
errno = ENOENT; |
return NULL; |
return NULL; |
} |
} |
return rbdelete(aliases, node); | debug_return_ptr(rbdelete(aliases, node)); |
} |
} |
|
|
void |
void |
init_aliases(void) |
init_aliases(void) |
{ |
{ |
|
debug_decl(init_aliases, SUDO_DEBUG_ALIAS) |
|
|
if (aliases != NULL) |
if (aliases != NULL) |
rbdestroy(aliases, alias_free); |
rbdestroy(aliases, alias_free); |
aliases = rbcreate(alias_compare); |
aliases = rbcreate(alias_compare); |
|
|
|
debug_return; |
} |
} |