diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2014-01-28 23:43:09 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2014-01-28 23:43:09 +0100 |
commit | e24381784b0a56896542d1a5828a77ad0e1c40ec (patch) | |
tree | 493e0d6ad811f563142c5de72a8b80bb5d142b93 /trans/password.c | |
parent | 613f84a0fcd46f2143b046b57c6c6444eafa4d4d (diff) | |
parent | b8c728ec51696c5d17ef09a00b3b193b70a487da (diff) | |
download | hurd-e24381784b0a56896542d1a5828a77ad0e1c40ec.tar.gz hurd-e24381784b0a56896542d1a5828a77ad0e1c40ec.tar.bz2 hurd-e24381784b0a56896542d1a5828a77ad0e1c40ec.zip |
Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/hurd
Diffstat (limited to 'trans/password.c')
-rw-r--r-- | trans/password.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/trans/password.c b/trans/password.c index 6f15a9e8..344b78ba 100644 --- a/trans/password.c +++ b/trans/password.c @@ -1,5 +1,5 @@ /* Hurd standard password server. - Copyright (C) 1999 Free Software Foundation + Copyright (C) 1999, 2013 Free Software Foundation Written by Mark Kettenis. The GNU Hurd is free software; you can redistribute it and/or @@ -135,10 +135,9 @@ trivfs_goaway (struct trivfs_control *fsys, int flags) /* Implement password_check_user as described in <hurd/password.defs>. */ kern_return_t -S_password_check_user (io_t server, uid_t user, char *pw, +S_password_check_user (struct trivfs_protid *cred, uid_t user, char *pw, mach_port_t *port, mach_msg_type_name_t *port_type) { - struct trivfs_protid *cred; struct ugids ugids = UGIDS_INIT; auth_t auth; error_t err; @@ -150,10 +149,16 @@ S_password_check_user (io_t server, uid_t user, char *pw, return strdup (pw); } - cred = ports_lookup_port (port_bucket, server, trivfs_protid_portclasses[0]); if (! cred) return EOPNOTSUPP; + if (cred->pi.bucket != port_bucket || + cred->pi.class != trivfs_protid_portclasses[0]) + { + ports_port_deref (cred); + return EOPNOTSUPP; + } + /* Verify password. */ err = ugids_add_user (&ugids, user, 1); if (!err) @@ -173,17 +178,14 @@ S_password_check_user (io_t server, uid_t user, char *pw, } ugids_fini (&ugids); - - ports_port_deref (cred); return err; } /* Implement password_check_group as described in <hurd/password.defs>. */ kern_return_t -S_password_check_group (io_t server, uid_t group, char *pw, +S_password_check_group (struct trivfs_protid *cred, uid_t group, char *pw, mach_port_t *port, mach_msg_type_name_t *port_type) { - struct trivfs_protid *cred; struct ugids ugids = UGIDS_INIT; auth_t auth; error_t err; @@ -195,10 +197,16 @@ S_password_check_group (io_t server, uid_t group, char *pw, return strdup (pw); } - cred = ports_lookup_port (port_bucket, server, trivfs_protid_portclasses[0]); if (! cred) return EOPNOTSUPP; - + + if (cred->pi.bucket != port_bucket || + cred->pi.class != trivfs_protid_portclasses[0]) + { + ports_port_deref (cred); + return EOPNOTSUPP; + } + /* Verify password. */ err = ugids_add_gid (&ugids, group, 1); if (!err) @@ -218,7 +226,5 @@ S_password_check_group (io_t server, uid_t group, char *pw, } ugids_fini (&ugids); - - ports_port_deref (cred); return err; } |