From: <n-...@us...> - 2011-05-20 06:35:44
|
Revision: 5350 http://gfarm.svn.sourceforge.net/gfarm/?rev=5350&view=rev Author: n-soda Date: 2011-05-20 06:35:37 +0000 (Fri, 20 May 2011) Log Message: ----------- fix #48 - it's better to recover original functionality of user_lookup() and group_lookup(). As the results, the following functions are renamed: * user_activate() -> user_validate() * group_activate() -> group_validate() * abstract_host_is_invalidated() -> abstract_host_is_invalid_unlocked() * user_is_invalidated() -> user_is_invalid() * user_is_active() -> user_is_valid() * user_lookup_gsi_dn() -> user_lookup_gsi_dn_including_invalid() * user_lookup() -> user_lookup_including_invalid() * group_lookup() -> group_lookup_including_invalid() And the following implementations are added with the original functionality: * user_lookup_gsi_dn() * user_lookup() * group_lookup() Modified Paths: -------------- gfarm_v2/trunk/server/gfmd/abstract_host.c gfarm_v2/trunk/server/gfmd/abstract_host.h gfarm_v2/trunk/server/gfmd/acl.c gfarm_v2/trunk/server/gfmd/db_journal_apply.c gfarm_v2/trunk/server/gfmd/fs.c gfarm_v2/trunk/server/gfmd/gfmd.c gfarm_v2/trunk/server/gfmd/group.c gfarm_v2/trunk/server/gfmd/group.h gfarm_v2/trunk/server/gfmd/host.c gfarm_v2/trunk/server/gfmd/inode.c gfarm_v2/trunk/server/gfmd/peer.c gfarm_v2/trunk/server/gfmd/quota.c gfarm_v2/trunk/server/gfmd/user.c gfarm_v2/trunk/server/gfmd/user.h Modified: gfarm_v2/trunk/server/gfmd/abstract_host.c =================================================================== --- gfarm_v2/trunk/server/gfmd/abstract_host.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/abstract_host.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -80,15 +80,15 @@ } int -abstract_host_is_invalidated(struct abstract_host *h) +abstract_host_is_invalid_unlocked(struct abstract_host *h) { - return (h->invalid == 1); + return (h->invalid != 0); } int abstract_host_is_valid_unlocked(struct abstract_host *h) { - return (!abstract_host_is_invalidated(h)); + return (h->invalid == 0); } int Modified: gfarm_v2/trunk/server/gfmd/abstract_host.h =================================================================== --- gfarm_v2/trunk/server/gfmd/abstract_host.h 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/abstract_host.h 2011-05-20 06:35:37 UTC (rev 5350) @@ -45,7 +45,7 @@ int abstract_host_get_protocol_version(struct abstract_host *); void abstract_host_invalidate(struct abstract_host *); void abstract_host_validate(struct abstract_host *); -int abstract_host_is_invalidated(struct abstract_host *); +int abstract_host_is_invalid_unlocked(struct abstract_host *); int abstract_host_is_valid_unlocked(struct abstract_host *); int abstract_host_is_valid(struct abstract_host *, const char *); void abstract_host_activate(struct abstract_host *, const char *); Modified: gfarm_v2/trunk/server/gfmd/acl.c =================================================================== --- gfarm_v2/trunk/server/gfmd/acl.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/acl.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -92,8 +92,7 @@ break; case GFARM_ACL_USER: gfs_acl_get_qualifier(ent, &qual); - if ((u = user_lookup(qual)) == NULL || - user_is_invalidated(u)) { + if ((u = user_lookup(qual)) == NULL) { gflog_debug(GFARM_MSG_UNFIXED, "unknown user: %s", qual); gfs_acl_free(acl); @@ -103,8 +102,7 @@ break; case GFARM_ACL_GROUP: gfs_acl_get_qualifier(ent, &qual); - if ((g = group_lookup(qual)) == NULL || - group_is_invalidated(g)) { + if ((g = group_lookup(qual)) == NULL) { gflog_debug(GFARM_MSG_UNFIXED, "unknown group: %s", qual); gfs_acl_free(acl); Modified: gfarm_v2/trunk/server/gfmd/db_journal_apply.c =================================================================== --- gfarm_v2/trunk/server/gfmd/db_journal_apply.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/db_journal_apply.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -100,7 +100,7 @@ { gfarm_error_t e; - if (user_is_active(user_lookup(ui->username))) { + if (user_lookup(ui->username) != NULL) { e = GFARM_ERR_ALREADY_EXISTS; gflog_error(GFARM_MSG_UNFIXED, "seqnum=%llu username=%s : %s", @@ -124,8 +124,7 @@ struct user *u; struct gfarm_user_info *ui = &m->ui; - if ((u = user_lookup(ui->username)) == NULL || - user_is_invalidated(u)) { + if ((u = user_lookup(ui->username)) == NULL) { e = GFARM_ERR_NO_SUCH_USER; gflog_error(GFARM_MSG_UNFIXED, "seqnum=%llu username=%s : %s", @@ -159,7 +158,7 @@ { gfarm_error_t e; - if (group_is_active(group_lookup(gi->groupname))) { + if (group_lookup(gi->groupname) != NULL) { e = GFARM_ERR_ALREADY_EXISTS; gflog_error(GFARM_MSG_UNFIXED, "seqnum=%llu groupname=%s : %s", @@ -190,8 +189,7 @@ struct gfarm_group_info *gi = &arg->gi; const char *diag = "db_journal_apply_group_modify"; - if ((g = group_lookup(gi->groupname)) == NULL || - group_is_invalidated(g)) { + if ((g = group_lookup(gi->groupname)) == NULL) { e = GFARM_ERR_NO_SUCH_GROUP; gflog_error(GFARM_MSG_UNFIXED, "seqnum=%llu groupname=%s : %s", Modified: gfarm_v2/trunk/server/gfmd/fs.c =================================================================== --- gfarm_v2/trunk/server/gfmd/fs.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/fs.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -1083,13 +1083,11 @@ "process_get_file_inode() failed: %s", gfarm_error_string(e)); } else if (*username != '\0' && - ((new_user = user_lookup(username)) == NULL || - user_is_invalidated(new_user))) { + (new_user = user_lookup(username)) == NULL) { gflog_debug(GFARM_MSG_1001841, "user is not found"); e = GFARM_ERR_NO_SUCH_USER; } else if (*groupname != '\0' && - ((new_group = group_lookup(groupname)) == NULL || - group_is_invalidated(new_group))) { + (new_group = group_lookup(groupname)) == NULL) { gflog_debug(GFARM_MSG_1001842, "group is not found"); e = GFARM_ERR_NO_SUCH_GROUP; } else if (new_user != NULL && !user_is_root(inode, user)) { Modified: gfarm_v2/trunk/server/gfmd/gfmd.c =================================================================== --- gfarm_v2/trunk/server/gfmd/gfmd.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/gfmd.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -798,7 +798,7 @@ } giant_unlock(); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { /* * do not return GFARM_ERR_NO_SUCH_USER * to prevent information leak Modified: gfarm_v2/trunk/server/gfmd/group.c =================================================================== --- gfarm_v2/trunk/server/gfmd/group.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/group.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -82,25 +82,25 @@ } static void -group_activate(struct group *g) +group_validate(struct group *g) { g->invalid = 0; } int -group_is_invalidated(struct group *g) +group_is_invalid(struct group *g) { - return (g->invalid == 1); + return (g->invalid != 0); } int -group_is_active(struct group *g) +group_is_valid(struct group *g) { - return (g != NULL && !group_is_invalidated(g)); + return (g->invalid == 0); } struct group * -group_lookup(const char *groupname) +group_lookup_including_invalid(const char *groupname) { struct gfarm_hash_entry *entry; @@ -111,6 +111,16 @@ return (*(struct group **)gfarm_hash_entry_data(entry)); } +struct group * +group_lookup(const char *groupname) +{ + struct group *g = group_lookup_including_invalid(groupname); + + if (g != NULL && group_is_valid(g)) + return (g); + return (NULL); +} + /* note that groupname may be free'ed */ static gfarm_error_t group_enter(char *groupname, struct group **gpp) @@ -119,10 +129,10 @@ int created; struct group *g; - g = group_lookup(groupname); + g = group_lookup_including_invalid(groupname); if (g != NULL) { - if (group_is_invalidated(g)) { - group_activate(g); + if (group_is_invalid(g)) { + group_validate(g); if (gpp != NULL) *gpp = g; free(groupname); @@ -160,7 +170,7 @@ quota_data_init(&g->q); g->users.user_prev = g->users.user_next = &g->users; *(struct group **)gfarm_hash_entry_data(entry) = g; - group_activate(g); + group_validate(g); if (gpp != NULL) *gpp = g; return (GFARM_ERR_NO_ERROR); @@ -181,9 +191,9 @@ return (GFARM_ERR_NO_SUCH_GROUP); } g = *(struct group **)gfarm_hash_entry_data(entry); - if (group_is_invalidated(g)) { + if (group_is_invalid(g)) { gflog_debug(GFARM_MSG_1001520, - "\"%s\" group is invalidated", groupname); + "\"%s\" group is invalid", groupname); return (GFARM_ERR_NO_SUCH_GROUP); } if (update_quota) @@ -217,7 +227,8 @@ char * group_name(struct group *g) { - return (group_is_active(g) ? g->groupname : REMOVED_GROUP_NAME); + return (g != NULL && group_is_valid(g) ? + g->groupname : REMOVED_GROUP_NAME); } struct quota * @@ -228,7 +239,7 @@ void group_all(void *closure, void (*callback)(void *, struct group *), - int active_only) + int valid_only) { struct gfarm_hash_iterator it; struct group **g; @@ -237,7 +248,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { g = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (!active_only || group_is_active(*g)) + if (!valid_only || group_is_valid(*g)) callback(closure, *g); } } @@ -260,7 +271,7 @@ } for (i = 0; i < gi->nusers; i++) { u = user_lookup(gi->usernames[i]); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { gflog_warning(GFARM_MSG_1000242, "group_add_one: unknown user %s", gi->usernames[i]); @@ -303,12 +314,12 @@ { struct user *u = user_lookup(username); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { gflog_debug(GFARM_MSG_1001521, "\"%s\" does not exist", username); return (GFARM_ERR_NO_SUCH_USER); } - if (g == NULL || group_is_invalidated(g)) { + if (g == NULL || group_is_invalid(g)) { gflog_debug(GFARM_MSG_1001522, "group is invalid or does not exist"); return (GFARM_ERR_NO_SUCH_GROUP); @@ -344,7 +355,7 @@ gi.groupname = group_name(g); n = 0; for (ga = g->users.user_next; ga != &g->users; ga = ga->user_next) - if (user_is_active(ga->u)) + if (user_is_valid(ga->u)) n++; gi.nusers = n; GFARM_MALLOC_ARRAY(gi.usernames, n); @@ -353,7 +364,7 @@ "group_add_user_and_record(%s): no memory", username); n = 0; for (ga = g->users.user_next; ga != &g->users; ga = ga->user_next) - if (user_is_active(ga->u)) + if (user_is_valid(ga->u)) gi.usernames[n++] = user_name(ga->u); e = db_group_modify(&gi, 0, 1, &username, 0, NULL); @@ -456,7 +467,7 @@ n = 0; for (ga = g->users.user_next; ga != &g->users; ga = ga->user_next) - if (user_is_active(ga->u)) + if (user_is_valid(ga->u)) n++; e = gfp_xdr_send(client, "si", g->groupname, n); if (e != GFARM_ERR_NO_ERROR) { @@ -466,7 +477,7 @@ return (e); } for (ga = g->users.user_next; ga != &g->users; ga = ga->user_next) { - if (user_is_active(ga->u)) + if (user_is_valid(ga->u)) if ((e = gfp_xdr_send(client, "s", user_name(ga->u))) != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001525, @@ -498,7 +509,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { gp = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (group_is_active(*gp)) + if (group_is_valid(*gp)) ++ngroups; } e = gfm_server_put_reply(peer, diag, @@ -514,7 +525,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { gp = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (group_is_active(*gp)) { + if (group_is_valid(*gp)) { e = group_info_send(client, *gp); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001527, @@ -597,7 +608,7 @@ giant_lock(); for (i = 0; i < ngroups; i++) { g = group_lookup(groups[i]); - if (g == NULL || group_is_invalidated(g)) { + if (g == NULL) { e = gfm_server_put_reply(peer, diag, GFARM_ERR_NO_SUCH_GROUP, ""); } else { @@ -671,7 +682,7 @@ for (i = 0; i < gi->nusers; i++) { u = user_lookup(gi->usernames[i]); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { gflog_warning(GFARM_MSG_1000253, "%s: unknown user %s", diag, gi->usernames[i]); @@ -706,7 +717,7 @@ gflog_debug(GFARM_MSG_1001535, "operation is not permitted for user"); e = GFARM_ERR_OPERATION_NOT_PERMITTED; - } else if (group_is_active(group_lookup(gi.groupname))) { + } else if (group_lookup(gi.groupname) != NULL) { gflog_debug(GFARM_MSG_1001536, "group already exists"); e = GFARM_ERR_ALREADY_EXISTS; @@ -754,7 +765,7 @@ const char *username = gi->usernames[i]; struct user *u = user_lookup(username); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { gflog_warning(GFARM_MSG_1000255, "%s: unknown user %s", diag, username); @@ -794,8 +805,7 @@ gflog_debug(GFARM_MSG_1001540, "operation is not permitted for user"); e = GFARM_ERR_OPERATION_NOT_PERMITTED; - } else if ((group = group_lookup(gi.groupname)) == NULL || - group_is_invalidated(group)) { + } else if ((group = group_lookup(gi.groupname)) == NULL) { gflog_debug(GFARM_MSG_1001541, "group_lookup() failed"); e = GFARM_ERR_NO_SUCH_GROUP; Modified: gfarm_v2/trunk/server/gfmd/group.h =================================================================== --- gfarm_v2/trunk/server/gfmd/group.h 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/group.h 2011-05-20 06:35:37 UTC (rev 5350) @@ -17,12 +17,13 @@ extern char ADMIN_GROUP_NAME[]; /* can modify host/user/group info of gfarm */ extern char ROOT_GROUP_NAME[]; /* can modify any data/metadata in gfarmfs */ +struct group *group_lookup_including_invalid(const char *); struct group *group_lookup(const char *); gfarm_error_t grpassign_add(struct user *, struct group *); void grpassign_remove(struct group_assignment *); char *group_name(struct group *); -int group_is_invalidated(struct group *); -int group_is_active(struct group *); +int group_is_invalid(struct group *); +int group_is_valid(struct group *); void group_all(void *, void (*)(void *, struct group *), int); Modified: gfarm_v2/trunk/server/gfmd/host.c =================================================================== --- gfarm_v2/trunk/server/gfmd/host.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/host.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -129,9 +129,9 @@ } static int -host_is_invalidated(struct host *h) +host_is_invalid_unlocked(struct host *h) { - return (abstract_host_is_invalidated(&h->ah)); + return (abstract_host_is_invalid_unlocked(&h->ah)); } int @@ -141,7 +141,7 @@ } static struct host * -host_lookup_internal(const char *hostname) +host_lookup_including_invalid(const char *hostname) { return (host_hashtab_lookup(host_hashtab, hostname)); } @@ -149,9 +149,9 @@ struct host * host_lookup(const char *hostname) { - struct host *h = host_lookup_internal(hostname); + struct host *h = host_lookup_including_invalid(hostname); - return ((h == NULL || host_is_invalidated(h)) ? NULL : h); + return ((h == NULL || host_is_invalid_unlocked(h)) ? NULL : h); } struct host * @@ -204,7 +204,7 @@ if (h != NULL) return (h); h = host_hashtab_lookup(hostalias_hashtab, hostname); - return ((h == NULL || host_is_invalidated(h)) ? NULL : h); + return ((h == NULL || host_is_invalid_unlocked(h)) ? NULL : h); } /* XXX FIXME missing hostaliases */ @@ -217,9 +217,9 @@ struct callout *callout; static const char diag[] = "host_enter"; - h = host_lookup_internal(hi->hostname); + h = host_lookup_including_invalid(hi->hostname); if (h != NULL) { - if (host_is_invalidated(h)) { + if (host_is_invalid_unlocked(h)) { host_validate(h); if (hpp != NULL) *hpp = h; Modified: gfarm_v2/trunk/server/gfmd/inode.c =================================================================== --- gfarm_v2/trunk/server/gfmd/inode.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/inode.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -1257,13 +1257,13 @@ void inode_set_user_by_name_in_cache(struct inode *inode, const char *username) { - inode->i_user = user_lookup(username); + inode->i_user = user_lookup_including_invalid(username); } void inode_set_group_by_name_in_cache(struct inode *inode, const char *groupname) { - inode->i_group = group_lookup(groupname); + inode->i_group = group_lookup_including_invalid(groupname); } gfarm_error_t @@ -2093,7 +2093,7 @@ gflog_error(GFARM_MSG_1002480, "no root directory"); return (NULL); } - admin = user_lookup(ADMIN_USER_NAME); + admin = user_lookup_including_invalid(ADMIN_USER_NAME); if (admin == NULL) { gflog_error(GFARM_MSG_1002481, "no admin user"); return (NULL); @@ -2341,7 +2341,7 @@ base = inode_lookup_lost_found(); if (base == NULL) return (GFARM_ERR_NO_SUCH_FILE_OR_DIRECTORY); - admin = user_lookup(ADMIN_USER_NAME); + admin = user_lookup_including_invalid(ADMIN_USER_NAME); if (admin == NULL) return (GFARM_ERR_NO_SUCH_USER); Modified: gfarm_v2/trunk/server/gfmd/peer.c =================================================================== --- gfarm_v2/trunk/server/gfmd/peer.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/peer.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -776,7 +776,7 @@ switch (id_type) { case GFARM_AUTH_ID_TYPE_USER: peer->user = user_lookup(username); - if (user_is_active(peer->user)) { + if (peer->user != NULL) { free(username); peer->username = NULL; } else Modified: gfarm_v2/trunk/server/gfmd/quota.c =================================================================== --- gfarm_v2/trunk/server/gfmd/quota.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/quota.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -105,7 +105,7 @@ static void quota_active_user_set_db(struct quota *q, struct user *u) { - if (user_is_active(u)) { + if (user_is_valid(u)) { gfarm_error_t e = db_quota_user_set(q, user_name(u)); if (e == GFARM_ERR_NO_ERROR) q->on_db = 1; @@ -119,7 +119,7 @@ static void quota_active_group_set_db(struct quota *q, struct group *g) { - if (group_is_active(g)) { + if (group_is_valid(g)) { gfarm_error_t e = db_quota_group_set(q, group_name(g)); if (e == GFARM_ERR_NO_ERROR) q->on_db = 1; @@ -263,7 +263,7 @@ if (qi->name == NULL) return; - u = user_lookup(qi->name); + u = user_lookup_including_invalid(qi->name); if (u == NULL) { quota_user_remove_db(qi->name); } else { @@ -281,7 +281,7 @@ if (qi->name == NULL) return; - g = group_lookup(qi->name); + g = group_lookup_including_invalid(qi->name); if (g == NULL) { quota_group_remove_db(qi->name); } else { @@ -687,11 +687,6 @@ e = GFARM_ERR_NO_SUCH_GROUP; else /* hidden groupnames */ e = GFARM_ERR_OPERATION_NOT_PERMITTED; - } else if (!group_is_active(group)) { - if (user_is_admin(peer_user)) - e = GFARM_ERR_NO_SUCH_GROUP; - else /* hidden groupnames */ - e = GFARM_ERR_OPERATION_NOT_PERMITTED; } else if ((!user_in_group(peer_user, group)) && !user_is_admin(peer_user)) e = GFARM_ERR_OPERATION_NOT_PERMITTED; @@ -709,8 +704,6 @@ e = GFARM_ERR_OPERATION_NOT_PERMITTED; else if ((user = user_lookup(name)) == NULL) e = GFARM_ERR_NO_SUCH_USER; - else if (!user_is_active(user)) - e = GFARM_ERR_NO_SUCH_USER; } if (e != GFARM_ERR_NO_ERROR) { giant_unlock(); @@ -775,7 +768,7 @@ if (is_group) { struct group *group = group_lookup(name); - if (!group_is_active(group)) { + if (group == NULL) { e = GFARM_ERR_NO_SUCH_GROUP; gflog_debug(GFARM_MSG_1002061, "%s: name=%s: %s", @@ -786,7 +779,7 @@ } } else { struct user *user = user_lookup(name); - if (!user_is_active(user)) { + if (user == NULL) { e = GFARM_ERR_NO_SUCH_USER; gflog_debug(GFARM_MSG_1002062, "%s: name=%s: %s", Modified: gfarm_v2/trunk/server/gfmd/user.c =================================================================== --- gfarm_v2/trunk/server/gfmd/user.c 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/user.c 2011-05-20 06:35:37 UTC (rev 5350) @@ -61,25 +61,25 @@ } static void -user_activate(struct user *u) +user_validate(struct user *u) { u->invalid = 0; } int -user_is_invalidated(struct user *u) +user_is_invalid(struct user *u) { - return (u->invalid == 1); + return (u->invalid != 0); } int -user_is_active(struct user *u) +user_is_valid(struct user *u) { - return (u != NULL && !user_is_invalidated(u)); + return (u->invalid == 0); } struct user * -user_lookup(const char *username) +user_lookup_including_invalid(const char *username) { struct gfarm_hash_entry *entry; @@ -89,8 +89,8 @@ return (*(struct user **)gfarm_hash_entry_data(entry)); } -struct user * -user_lookup_gsi_dn(const char *gsi_dn) +static struct user * +user_lookup_gsi_dn_including_invalid(const char *gsi_dn) { struct gfarm_hash_entry *entry; @@ -103,6 +103,26 @@ return (*(struct user **)gfarm_hash_entry_data(entry)); } +struct user * +user_lookup(const char *username) +{ + struct user *u = user_lookup_including_invalid(username); + + if (u != NULL && user_is_valid(u)) + return (u); + return (NULL); +} + +struct user * +user_lookup_gsi_dn(const char *gsi_dn) +{ + struct user *u = user_lookup_gsi_dn_including_invalid(gsi_dn); + + if (u != NULL && user_is_valid(u)) + return (u); + return (NULL); +} + gfarm_error_t user_enter_gsi_dn(const char *gsi_dn, struct user *u) { @@ -130,13 +150,13 @@ struct user *u; gfarm_error_t e; - u = user_lookup(ui->username); + u = user_lookup_including_invalid(ui->username); if (u != NULL) { - if (user_is_invalidated(u)) { + if (user_is_invalid(u)) { e = user_enter_gsi_dn(ui->gsi_dn, u); if (e != GFARM_ERR_NO_ERROR) return (e); - user_activate(u); + user_validate(u); if (upp != NULL) *upp = u; /* copy user info but keeping address of username */ @@ -187,7 +207,7 @@ quota_data_init(&u->q); u->groups.group_prev = u->groups.group_next = &u->groups; *(struct user **)gfarm_hash_entry_data(entry) = u; - user_activate(u); + user_validate(u); if (upp != NULL) *upp = u; return (GFARM_ERR_NO_ERROR); @@ -207,9 +227,9 @@ return (GFARM_ERR_NO_SUCH_USER); } u = *(struct user **)gfarm_hash_entry_data(entry); - if (user_is_invalidated(u)) { + if (user_is_invalid(u)) { gflog_debug(GFARM_MSG_1001497, - "user is invalidated"); + "user is invalid"); return (GFARM_ERR_NO_SUCH_USER); } @@ -246,19 +266,22 @@ char * user_name(struct user *u) { - return (user_is_active(u) ? u->ui.username : REMOVED_USER_NAME); + return (u != NULL && user_is_valid(u) ? + u->ui.username : REMOVED_USER_NAME); } char * user_realname(struct user *u) { - return (user_is_active(u) ? u->ui.realname : REMOVED_USER_NAME); + return (u != NULL && user_is_valid(u) ? + u->ui.realname : REMOVED_USER_NAME); } char * user_gsi_dn(struct user *u) { - return (user_is_active(u) ? u->ui.gsi_dn : REMOVED_USER_NAME); + return (u != NULL && user_is_valid(u) ? + u->ui.gsi_dn : REMOVED_USER_NAME); } struct quota * @@ -269,7 +292,7 @@ void user_all(void *closure, void (*callback)(void *, struct user *), - int active_only) + int valid_only) { struct gfarm_hash_iterator it; struct user **u; @@ -278,7 +301,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { u = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (!active_only || user_is_active(*u)) + if (!valid_only || user_is_valid(*u)) callback(closure, *u); } } @@ -291,9 +314,9 @@ if (user == NULL || group == NULL) /* either is already removed */ return (0); - if (user_is_invalidated(user)) + if (user_is_invalid(user)) return (0); - if (group_is_invalidated(group)) + if (group_is_invalid(group)) return (0); for (ga = user->groups.group_next; ga != &user->groups; @@ -509,7 +532,7 @@ "loading users: %s", gfarm_error_string(e)); /* - * there is no removed (invalidated) user since the hash is + * there is no removed (invalid) user since the hash is * just created. */ if (user_lookup(ADMIN_USER_NAME) == NULL) @@ -553,7 +576,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { u = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (user_is_active(*u)) + if (user_is_valid(*u)) ++nusers; } e = gfm_server_put_reply(peer, diag, @@ -569,7 +592,7 @@ !gfarm_hash_iterator_is_end(&it); gfarm_hash_iterator_next(&it)) { u = gfarm_hash_entry_data(gfarm_hash_iterator_access(&it)); - if (user_is_active(*u)) { + if (user_is_valid(*u)) { e = user_info_send(client, &(*u)->ui); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001499, @@ -652,7 +675,7 @@ giant_lock(); for (i = 0; i < nusers; i++) { u = user_lookup(users[i]); - if (u == NULL || user_is_invalidated(u)) { + if (u == NULL) { if (debug_mode) gflog_info(GFARM_MSG_1000238, "user lookup <%s>: failed", @@ -708,10 +731,10 @@ /* XXX FIXME too long giant lock */ giant_lock(); u = user_lookup_gsi_dn(gsi_dn); - if (u == NULL || user_is_invalidated(u)) + if (u == NULL) { e = gfm_server_put_reply(peer, diag, GFARM_ERR_NO_SUCH_USER, ""); - else { + } else { ui = &u->ui; e = gfm_server_put_reply(peer, diag, e, "ssss", ui->username, ui->realname, ui->homedir, @@ -764,7 +787,7 @@ gflog_debug(GFARM_MSG_1001505, "Operation is not permitted"); e = GFARM_ERR_OPERATION_NOT_PERMITTED; - } else if (user_is_active(user_lookup(ui.username))) { + } else if (user_lookup(ui.username) != NULL) { e = GFARM_ERR_ALREADY_EXISTS; gflog_debug(GFARM_MSG_1001506, "User already exists"); @@ -831,8 +854,7 @@ gflog_debug(GFARM_MSG_1001509, "operation is not permitted"); needs_free = 1; - } else if ((u = user_lookup(ui.username)) == NULL || - user_is_invalidated(u)) { + } else if ((u = user_lookup(ui.username)) == NULL) { e = GFARM_ERR_NO_SUCH_USER; gflog_debug(GFARM_MSG_1001510, "user_lookup() failed"); Modified: gfarm_v2/trunk/server/gfmd/user.h =================================================================== --- gfarm_v2/trunk/server/gfmd/user.h 2011-05-20 02:09:07 UTC (rev 5349) +++ gfarm_v2/trunk/server/gfmd/user.h 2011-05-20 06:35:37 UTC (rev 5350) @@ -1,13 +1,14 @@ void user_init(void); struct user; +struct user *user_lookup_including_invalid(const char *); struct user *user_lookup(const char *); struct user *user_lookup_gsi_dn(const char *); char *user_name(struct user *); char *user_realname(struct user *); char *user_gsi_dn(struct user *); -int user_is_invalidated(struct user *); -int user_is_active(struct user *); +int user_is_invalid(struct user *); +int user_is_valid(struct user *); struct gfarm_user_info; gfarm_error_t user_enter(struct gfarm_user_info *, struct user **); void user_modify(struct user *, struct gfarm_user_info *); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |