2011-07-07 4 views
3

現在、目的のCを使用して現在ログインしているユーザタイプ(root、admin、またはnormal)を取得する方法はありますか?目的CとOSのユーザタイプ

私は約NSFullUserName()を知っていますが、これはユーザー名を示しますが、ユーザーの種類を取得する方法は?

ありがとうございました。

答えて

11

​​またはgetpwuidを使用してユーザグループを取得し、次にgetgrgidを使用して、gidからグループ名を取得できます。

これらは、標準ライブラリのC関数です。

- 編集:ここでは短い、悪いコード化されたCの例がある---ここ

あなたはあなたができる getpwnam_example.cファイルに名前を付けるならば、それは(作る使用して構築する必要があり、端末内のMAC OS上で、小さな例です $ make getpwnam_exampleはcファイルと同じディレクトリにあります)。

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <strings.h> 
#include <pwd.h> 
#include <grp.h> 

int main(int argc, char **argv) { 

    uid_t current_user_id = getuid(); 
    printf("My Current UID is %d\n", current_user_id); 

    struct passwd *pwentry = getpwuid(current_user_id); 
    printf("My Current Name is %s\n", pwentry->pw_gecos); 
    printf("My Current Group ID is %d\n", pwentry->pw_gid); 

    struct group *grentry = getgrgid(getgid()); 
    printf("My Current Group Name is %s\n", grentry->gr_name); 

    printf("Am I an admin? "); 
    struct group *admin_group = getgrnam("admin"); 
    while(*admin_group->gr_mem != NULL) { 
     if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) { 
      printf("yes!\n"); 
     } 
     admin_group->gr_mem++; 
    } 

    return 0; 
} 
+0

おかげで...しかし、これは私のグループ名....ないユーザーの種類を提供します。.. – Priya

+0

ユーザタイプが実際にグループのちょうど本名属性である、それはアクセスが決まりグループです。属性はdsclコマンド(dscl。-read/Groups/admin)で確認できます。 –

+0

申し訳ありませんが、私は何も得ていません.... – Swapnil