On Thu, 2014-02-20 at 11:53 +0400, Stanislav Kholmanskikh wrote:
> Hi!
> 
> On 02/20/2014 06:10 AM, 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().
> 
> Thank you.
> 
> I was puzzled by these two sentences in the getgrgid_r man (RHEL6):
> "If no matching  group  record was  found,  these  functions  return  0 
>   and  store  NULL  in *result.  In case of error, an error number is
> returned, and NULL is stored in *result."
> 
> Maybe update the man page according with 
> http://www.gnu.org/software/libc/manual/html_node/Lookup-Group.html. I 
> think that there the return values are described more clear.
> 
> What do you think?
> 

Hi,
So sorry for the late response.
I think there is a little different in RHEL7.0Beta.
If no gid was found, it returned ENOENT in RHEL7.0Beta.

[root@RHEL7U0Beta_zenglg tmp]# cat test.c 
#include <stdlib.h>
#include <sys/types.h>
#include <grp.h>
#include <unistd.h>
#include <limits.h>

int main(void)
{
        gid_t gid;
        int s;
        struct group grp;
        char *buf;
        long bufsize;
        struct group *result;

        bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
        if (bufsize == -1)
                bufsize = 16384;

        buf = malloc(bufsize);
        if (buf == NULL)
                return -1;

        for (gid = 0; gid <= UINT_MAX - 1; gid++) {
                s = getgrgid_r(gid, &grp, buf, bufsize, &result);
                if (result == NULL) {
                        free(buf);
                        printf("s: %d\tgid: %d\n", s, gid);
                        if (s == 0)
                                return gid;
                        else
                                return -1;
                }
        }
}


Here is the result that output:
[root@RHEL5U10GA_Intel64 tmp]# ./test 
s: 0    gid: 11

[root@RHEL6U5GA_Intel64 tmp]# ./test 
s: 0    gid: 13

[root@RHEL7U0Beta_zenglg tmp]# ./test 
s: 2    gid: 13

Best regards,
Zeng


------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to