[Linux/Unix] 시스템 계정 패스워드 길이 체크…

시스템 계정의 패스워드 길이 체크하는 소스입니다. 끄적 ^^

int chk_password_length(const char *p_pwdconfigfile) {

 int passwd_length = 0;
 FILE *p_FILEstream = NULL; 
 char buf[2048] = {0};
 char buf2[2048] = {0};
 char *token = NULL;
 char s_passwdminlength[64] = {0};
#if defined(HPUX)
 char *separate = “:= \t”;
#else
 char *separate = “= \t”;
#endif
 char category_buf[16] = {0};
 char log_buffer[MAXBUF] = {0};
#if defined(HPUX) 
 char hpux_pwdconfigfile[128] = {0}; 
 int hpux_trustmode = 0;
#endif

#if defined(DEBUG)
 printf(“%s : “,CHK_PASSWD_MIN_LENGTH_COMMENT);
#endif
 
#if defined(HPUX)
 if (! access(“/tcb/files/auth/system/default”, F_OK) ) {
  strncpy(hpux_pwdconfigfile, “/tcb/files/auth/system/default”, sizeof(hpux_pwdconfigfile)-1);
  p_pwdconfigfile=&hpux_pwdconfigfile[0];
  hpux_trustmode = 1;
 } else {
  strncpy(hpux_pwdconfigfile, “/etc/default/security”, sizeof(hpux_pwdconfigfile)-1);
 }
  p_pwdconfigfile=&hpux_pwdconfigfile[0];
#endif 

#if defined(HPUX)
 if ( (   hpux_trustmode && ! access(“/tcb/files/auth/system/default”, F_OK) ) ||
   ( ! hpux_trustmode && ! access(“/etc/default/security”, F_OK) ) ) {
#endif
 p_FILEstream = fopen(p_pwdconfigfile, “r”); 
 if ( !p_FILEstream ) return FALSE;

 while ( fgets(buf, 2048, p_FILEstream) != NULL ) {
#if defined(HPUX)
  if (! hpux_trustmode) delete_comment(buf);
#else
  delete_comment(buf);
#endif
  if (buf[0] == ”) continue;

#if defined(HPUX) 
  if ( hpux_trustmode ) {

   strcpy(s_passwdminlength, TRUST_PASSWORDMINLENTH);
  } else {
   
   strcpy(s_passwdminlength, NONTRUST_PASSWORDMINLENTH);
  }
#else
  strcpy(s_passwdminlength, PASSWORDMINLENTH);
#endif
  if ( strstr(buf, s_passwdminlength) ) {
   strcpy(buf2, buf);
#if defined(DEBUG) 
   fputs(buf, stdout);
#endif
   token = strtok(buf, separate);
   while (token != NULL) {
    
    if ( token[strlen(token)-1] == ‘\n’) token[strlen(token)-1] = ”;
    if ( atoi(token) ) {
     passwd_length = atoi(token);
     break;
    }
    token = strtok(NULL, separate);
   }
   break; 
  }
  memset(buf, ”, sizeof(buf));
  memset(buf2, ”, sizeof(buf));
 }
#if defined(HPUX)
 } else {
  passwd_length=0;
 }
#endif

 category_no++;
 sprintf(category_buf, CATEGORY_PREFIX, category_no);
 sprintf(log_buffer, “%s %s %s %s\n”, category_buf, CHK_PASSWD_MIN_LENGTH_COMMENT, CATEGORY_SEPARATOR, passwd_length < 8 ? “WEAK” : “SAFE”);
 if ( passwd_length ) {
  strcat(log_buffer, buf2);
  strcat(log_buffer, “\n”);
 }

 logwrite(logfile, log_buffer);

 fclose(p_FILEstream);
 return TRUE; 
}

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: