Merge "add tzplatform_has_users_group() api" into tizen submit/tizen_3.0.2015.q1_common/20150316.105130 submit/tizen_common/20150316.103635 submit/tizen_common/20150316.105034
authorStéphane Desneux (sdx) <stephane.desneux@open.eurogiciel.org>
Mon, 16 Mar 2015 10:39:03 +0000 (03:39 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Mon, 16 Mar 2015 10:39:03 +0000 (03:39 -0700)
src/Makefile.am
src/build.sh
src/groups.c [moved from src/isadmin.c with 69% similarity]
src/groups.h [moved from src/isadmin.h with 67% similarity]
src/static-api.c
src/tzplatform_config.h

index 932b323..1329919 100644 (file)
@@ -31,5 +31,5 @@ dist_pkgdata_DATA = buffer.c \
                     tzplatform_get.c \
                     passwd.h \
                     passwd.c \
-                    isadmin.h \
-                    isadmin.c
+                    groups.h \
+                    groups.c
index 8f76b08..4b12a2e 100755 (executable)
@@ -15,7 +15,7 @@ d ./toolbox c > hash.inc
 d ./toolbox signup > signup.inc
 d gcc $f -c *.c
 d ld -shared --version-script=tzplatform_config.sym -o libtzplatform-shared.so buffer.o   foreign.o  heap.o  parser.o  scratch.o context.o  hashing.o  init.o  passwd.o  shared-api.o
-d ar cr libtzplatform-static.a static-api.o isadmin.o
+d ar cr libtzplatform-static.a static-api.o groups.o
 d gcc -o get tzplatform_get.o static-api.o -L. -ltzplatform-static -ltzplatform-shared
 
 
similarity index 69%
rename from src/isadmin.c
rename to src/groups.c
index 1d1d699..0e7ec5e 100644 (file)
 #include <grp.h>
 #include <pwd.h>
 
-#include "isadmin.h"
-#include "tzplatform_variables.h"
+#include "groups.h"
 #include "tzplatform_config.h"
 
-int _has_system_group_static_(uid_t uid) {
+int _has_specified_group_static_(uid_t uid, enum tzplatform_variable group) {
        
        struct passwd *userinfo = NULL;
-       struct group *systemgroupinfo = NULL;
-       const char *sysgrpname = NULL;
+       struct group *groupinfo = NULL;
+       const char *grpname = NULL;
        uid_t myuid = 0;
-       gid_t system_gid = 0;
+       gid_t gid = 0;
        gid_t *groups = NULL;
        int i, nbgroups = 0;
        
-       
+       if (group != TZ_SYS_USER_GROUP || group != TZ_SYS_ADMIN_GROUP) {
+               fprintf( stderr, "groups ERROR: group is not valid \n");
+               return -1;
+       }
+
        if(uid == -1)
                /* Get current uid */
                myuid = getuid();
        else
                myuid = uid;
        
-       /* Get the gid of the group named "system" */
-       sysgrpname = tzplatform_getname(TZ_SYS_ADMIN_GROUP);
-       if(sysgrpname == NULL) {
-               fprintf( stderr, "isadmin ERROR: variable TZ_SYS_ADMIN_GROUP is NULL");
+       /* Get the gid of the group */
+       grpname = tzplatform_getname(group);
+       if(grpname == NULL) {
+               fprintf( stderr, "groups ERROR: variable TZ_SYS_ADMIN_GROUP is NULL");
                return -1;
        }
-       systemgroupinfo = getgrnam(sysgrpname);
-       if(systemgroupinfo == NULL) {
-               fprintf( stderr, "isadmin ERROR: cannot find group named \"%s\"\n", sysgrpname);
+       groupinfo = getgrnam(grpname);
+       if(groupinfo == NULL) {
+               fprintf( stderr, "groups ERROR: cannot find group named \"%s\"\n", grpname);
                return -1;
        }
        
-       system_gid = systemgroupinfo->gr_gid;
+       gid = groupinfo->gr_gid;
        
        /* Get all the gid of the given uid */
        
@@ -78,26 +81,26 @@ int _has_system_group_static_(uid_t uid) {
        /* Need to call this function now to get the number of group to make the
           malloc correctly sized */
        if (getgrouplist(userinfo->pw_name, userinfo->pw_gid, groups, &nbgroups) != -1) {
-               fprintf( stderr, "isadmin ERROR: cannot get number of groups\n");
+               fprintf( stderr, "groups ERROR: cannot get number of groups\n");
                return -1;
        }
        
        groups = malloc(nbgroups * sizeof (gid_t));
        if (groups == NULL) {
-               fprintf( stderr, "isadmin ERROR: malloc cannot allocate memory\n");
+               fprintf( stderr, "groups ERROR: malloc cannot allocate memory\n");
                return -1;
        }
        
        if (getgrouplist(userinfo->pw_name, userinfo->pw_gid, groups, &nbgroups) == -1) {
                free(groups);
-               fprintf( stderr, "isadmin ERROR: cannot get groups\n");
+               fprintf( stderr, "groups ERROR: cannot get groups\n");
                return -1;
        }
        
-       /* Check if the given uid is in the system group */
+       /* Check if the given uid is in the specified group */
        
        for(i = 0 ; i < nbgroups ; i++) {
-               if(groups[i] == system_gid) {
+               if(groups[i] == gid) {
                        free(groups);
                        return 1;
                }
similarity index 67%
rename from src/isadmin.h
rename to src/groups.h
index 25ebd75..57175fc 100644 (file)
 extern "C" {
 #endif
  
-#ifndef TIZEN_PLATFORM_WRAPPER_ISADMIN_H
-#define TIZEN_PLATFORM_WRAPPER_ISADMIN_H
+#ifndef TIZEN_PLATFORM_WRAPPER_GROUPS_H
+#define TIZEN_PLATFORM_WRAPPER_GROUPS_H
+
+#include "tzplatform_variables.h"
 
 /*
- * DISCLAIMER :
- *  This header and its associated source file are present to maintain a 
- * temporary solution. We need to know if an user have the privilege for
- * a particular action.
- * 
- * At the end, this feature will be managed by Cynara
- * 
+ * This feature aims to know if a user belongs to a specified group
  */
 
 /*
- * Return 0 if the given uid is not in the admin group.
- * Return 1 if the given uid is in the admin group.
+ * Return 0 if the given uid is not in the specified group.
+ * Return 1 if the given uid is in the specified group.
  * 
  * If you pass the -1 value to this function it will take the current uid given
  * by the POSIX function getuid();
 */
-int _has_system_group_static_(uid_t uid);
+int _has_specified_group_static_(uid_t uid, enum tzplatform_variable group);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* TIZEN_PLATFORM_WRAPPER_ISADMIN_H  */
+#endif /* TIZEN_PLATFORM_WRAPPER_GROUPS_H  */
 
index d6a4e0c..98f5e20 100644 (file)
@@ -32,7 +32,7 @@
 #include "tzplatform_config.h"
 
 #include "shared-api.h"
-#include "isadmin.h"
+#include "groups.h"
 
 #include "signup.inc"
 
@@ -133,7 +133,12 @@ gid_t tzplatform_context_getgid(struct tzplatform_context *context, enum tzplatf
 
 int tzplatform_has_system_group(uid_t uid) 
 {
-       return _has_system_group_static_(uid);
+       return _has_specified_group_static_(uid, TZ_SYS_ADMIN_GROUP);
+}
+
+int tzplatform_has_users_group(uid_t uid)
+{
+  return _has_specified_group_static_(uid, TZ_SYS_USER_GROUP);
 }
 
 #ifdef TEST
index ab998b0..12b85b0 100644 (file)
@@ -404,6 +404,23 @@ gid_t tzplatform_context_getgid(struct tzplatform_context *context, enum tzplatf
 extern
 int tzplatform_has_system_group(uid_t uid);
 
+/*
+ Return 1 if given uid is in the regular users group (named "users")
+ Return 0 if not
+ Return -1 in case of error.
+
+ Example:
+        tzplatform_has_users_group(1000)
+
+    will return 0 or 1 depends on right of given uid.
+
+   NOTE :
+   * If you pass the -1 value to this function it will take the current uid given
+   * by the POSIX function getuid();
+*/
+extern
+int tzplatform_has_users_group(uid_t uid);
+
 #ifdef __cplusplus
 }
 #endif