2012. 7. 13. 16:06

/etc/passwd 참조

struct passwd 참조

--------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

main()
{
   /* 실제 사용자 ID를 알아 냄 */
   printf("Userid : %d\n", getuid());
   /* 실제 그룹 ID를 알아 냄 */
   printf("Groupid : %d\n", getgid());
   exit(0);
}

-------------------------------------------------------------------------------------------

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

main()
{
   uid_t uid;
   struct passwd *pw;

   /* 실제 사용자 ID를 얻어 옴 */
   uid = getuid();
   /* uid에 대한 사용자 정보를 얻어 옴 */
   pw = getpwuid(uid);
   /* pw->pw_name는 사용자 계정, pw->pw_uid은 사용자 ID, pw->pw_gid는
     사용자가 속한 그룹 ID, pw->pw_dir는 사용자의 홈 디렉토리를 의미 */
   printf("name:%s, uid:%d, gid:%d, home:%s\n", pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir);

   exit(0);
}

-------------------------------------------------------------------------------------------

#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>

main()
{
   struct passwd *pw;

   /* 패스워드 파일로부터 사용자 정보를 차례로 읽어 출력 */
   while (pw = getpwent()) {
      /* pw->pw_name는 사용자 계정, pw->pw_uid은 사용자 ID,
         pw->pw_dir는 사용자의 홈 디렉토리를 의미 */
      printf("name:%s, uid:%d, home:%s\n", pw->pw_name, pw->pw_uid, pw->pw_dir);
   }
   /* 사용이 끝난 패스워드 파일을 닫음 */
   endpwent();
   exit(0);
}

-------------------------------------------------------------------------------------------

/etc/group 참조

struct group 참조

-------------------------------------------------------------------------------------------

#include <stdio.h>
#include <grp.h>
#include <sys/types.h>

main()
{
   struct group *pg;
   int i;

   /* 그룹 파일로부터 그룹 정보를 차례로 읽어 출력 */
   while (pg = getgrent()) {
      printf("group name: %s\n   member: ", pg->gr_name);
      /* 그룹에 속한 사용자 계정 전부를 출력 */
      for (i=0; pg->gr_mem[i]!=NULL; i++)
         printf("%s ", pg->gr_mem[i]);
      printf("\n\n");
   }
   /* 사용이 끝난 그룹 파일을 닫음 */
   endgrent();
   exit(0);
}

-------------------------------------------------------------------------------------------

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

main()
{
   gid_t gid;
   struct group *pg;
   int i;

   /* 그룹 ID를 얻음 */
   gid = getgid();
   /* 그룹 정보를 얻음 */
   pg = getgrgid(gid);
   printf("group name : %s\n", pg->gr_name);  /* pg->gr_name은 그룹의 이름 */
   exit(0);
}

-------------------------------------------------------------------------------------------
사용자 그룹정보를 알아내는 프로그램 구현하기

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

main()
{
   uid_t uid;
   gid_t gid;
   struct passwd *pw;
   struct group *pg;
   int i;

   uid = getuid();  /* 사용자 ID 얻어 옴 */
   pw = getpwuid(uid);  /* 패스워드 파일로부터 사용자 정보 얻어 옴 */
   gid = getgid();  /* 그룹 ID 얻어 옴 */
   pg = getgrgid(gid);  /* 그룹 파일로부터 그룹 정보 얻어 옴 */

   printf("uid=%d(%s) ", uid, pw->pw_name);  /* 사용자 ID와 사용자 계정 출력 */
   printf("gid=%d(%s) groups=", gid, pg->gr_name);  /* 그룹 ID와 그룹 이름 출력 */

   /* 그룹 파일로부터 모든 그룹 정보를 차례로 얻어 옴 */
   while (pg = getgrent()) {
      /* 해당 그룹에 속한 모든 사용자 계정에 대해 */
      for (i=0; pg->gr_mem[i]!=NULL; i++) {
         /* 프로그램의 사용자 계정(pw->pw_name)과 pg가 가리키는 그룹에 속한
           사용자 계정이 같다는 것은 현 사용자가 pg 그룹에 속해있다는 것을
           의미한다. 조건이 참이면 즉, 현 사용자 계정이 같으면
           pg가 가리키는 그룹 이름을 출력한다. */
         if (!strcmp(pw->pw_name, pg->gr_mem[i]))
            printf("%d(%s) ", pg->gr_gid, pg->gr_name);
      }
   }
   printf("\n");
   exit(0);
}

Posted by 몰라욧