[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] trans: fix the receiver lookup in password
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/2] trans: fix the receiver lookup in password |
Date: |
Sun, 19 Jan 2014 21:09:47 +0100 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, le Sat 18 Jan 2014 18:19:25 +0100, a écrit :
> Use translation functions instead of doing the lookup manually.
>
> * trans/Makefile (password-MIGSFLAGS): Add mutators.
> * trans/password.c (S_password_check_user): Update accordingly.
> (S_password_check_group): Likewise.
Ack.
> ---
> trans/Makefile | 6 +++++-
> trans/password.c | 30 ++++++++++++++++++------------
> 2 files changed, 23 insertions(+), 13 deletions(-)
>
> diff --git a/trans/Makefile b/trans/Makefile
> index 291df2f..c0386d0 100644
> --- a/trans/Makefile
> +++ b/trans/Makefile
> @@ -1,6 +1,6 @@
> #
> # Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2006, 2007,
> -# 2008 Free Software Foundation, Inc.
> +# 2008, 2013 Free Software Foundation, Inc.
> #
> # This program is free software; you can redistribute it and/or
> # modify it under the terms of the GNU General Public License as
> @@ -32,6 +32,10 @@ OBJS = $(SRCS:.c=.o) fsysServer.o ifsockServer.o
> passwordServer.o \
> HURDLIBS = ports netfs trivfs iohelp fshelp pipe ihash shouldbeinlibc
> LDLIBS += -lpthread
> password-LDLIBS = $(LIBCRYPT)
> +password-MIGSFLAGS=\
> + "-DIO_INTRAN=trivfs_protid_t trivfs_begin_using_protid (io_t)" \
> + "-DIO_DESTRUCTOR=trivfs_end_using_protid (trivfs_protid_t)" \
> + "-DPASSWORD_IMPORTS=import <hurd/trivfs.h>;"
>
> include ../Makeconf
>
> diff --git a/trans/password.c b/trans/password.c
> index 6f15a9e..344b78b 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;
> }
> --
> 1.8.5.2
>
--
Samuel
"How should I know if it works? That's what beta testers are for. I only
coded it."
(Attributed to Linus Torvalds, somewhere in a posting)