Hi,
        Could any one help to review this patch?
Thanks,
Zeng

On Thu, 2014-02-20 at 10:10 +0800, Zeng Linggang wrote:
> When we  call getgrgid_r()  to  verify whether the corresponding gid is
> existent, if not, getgrgid_r() will return 0 or ENOENT or ESRCH or
> EBADF or EPERM...
> 
> But tst_get_unused_gid() only check return value 0, this is not complete.
> For example, if the gid is not existent, getgrgid_r() in RHEL7 beta will
> return ENOENT, which will cause tst_get_unused_gid failed incorrectly.
> This is the same for getpwuid_r().
> 
> We should make tst_get_unused_uid/tst_get_unused_gid check all the possible
> return value.
> 
> Signed-off-by: Zeng Linggang <[email protected]>
> ---
>  lib/tst_uid_gid.c | 31 +++++++++++++++++++++++++++----
>  1 file changed, 27 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/tst_uid_gid.c b/lib/tst_uid_gid.c
> index 3ba1ad6..a835c38 100644
> --- a/lib/tst_uid_gid.c
> +++ b/lib/tst_uid_gid.c
> @@ -16,6 +16,7 @@
>   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>   */
>  
> +#include <errno.h>
>  #include <grp.h>
>  #include <limits.h>
>  #include <pwd.h>
> @@ -44,10 +45,21 @@ uid_t tst_get_unused_uid(void)
>               s = getpwuid_r(uid, &pwd, buf, bufsize, &result);
>               if (result == NULL) {
>                       free(buf);
> -                     if (s == 0)
> +                     /*
> +                      * When the given name or gid was not found, getgrgid_r
> +                      * may return 0 or ENOENT or ESRCH or EBADF or EPERM
> +                      * or ...
> +                      */
> +                     switch (s) {
> +                     case 0:
> +                     case ENOENT:
> +                     case ESRCH:
> +                     case EBADF:
> +                     case EPERM:
>                               return uid;
> -                     else
> +                     default:
>                               return -1;
> +                     }
>               }
>       }
>  
> @@ -76,10 +88,21 @@ gid_t tst_get_unused_gid(void)
>               s = getgrgid_r(gid, &grp, buf, bufsize, &result);
>               if (result == NULL) {
>                       free(buf);
> -                     if (s == 0)
> +                     /*
> +                      * When the given name or gid was not found, getgrgid_r
> +                      * may return 0 or ENOENT or ESRCH or EBADF or EPERM
> +                      * or ...
> +                      */
> +                     switch (s) {
> +                     case 0:
> +                     case ENOENT:
> +                     case ESRCH:
> +                     case EBADF:
> +                     case EPERM:
>                               return gid;
> -                     else
> +                     default:
>                               return -1;
> +                     }
>               }
>       }
>  



------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to