#!/usr/bin/php
<?
chdir(dirname(__FILE__));
require_once('../nmail/include/global.php');
require_once("include/mail_lib.php");
require_once('include/admin_lib.php');
require_once('include/member_group_lib.php');

/*

	sample)
		./_mbr_add.sh.php passkorea.net "관리자" "postmaster" "asdf" "ADMIN"
		./_mbr_add.sh.php passkorea.net "사용자" "user1" "asdf"


	$_SERVER['argv'][5] - ADMIN (관리자일때)
	$_SERVER['argv'][6] - PWDISENC (암호화된 비밀번호일때)
	$_SERVER['argv'][7] - "email1, email2" (포워딩할 메일주소)
	$_SERVER['argv'][8] - 20480 (사용자 메일용량. KB)
	$_SERVER['argv'][9] - 회원그룹
	$_SERVER['argv'][10] - 추가필드(parse_str사용) - ex) m_office_subject=%BB%E7%BF%F8
	$_SERVER['argv'][11] - 회원직위

	ex)
		./mbr_add.php id21.domain.com test31 test31 asfkdjasfjasdl USERID PWDISENC
		./mbr_add.php id21.domain.com test32 test32 asfkdjasfjasdl USERID PWDISENC "id@domain.com, id2@domain.com"

*/


// 웹상에서의 실행방지.
if ($_SERVER['DOCUMENT_ROOT'] || $_SERVER['SERVER_SOFTWARE'])
{
	die("올바른 URL로 접근하여 주십시오.\n");
}	// if()

// 입력값 확인.
if (!$_SERVER['argv'][1] || !$_SERVER['argv'][2] || !$_SERVER['argv'][3] || trim($_SERVER['argv'][4]) == '')
{
	die("메일서버에 메일계정을 추가하는 명령입니다.\n  일반사용자 추가시) ".$_SERVER['PHP_SELF']." 'DOMAIN' 'NAME' 'USERID' 'PASSWORD'\n  일반사용자 추가시) ".$_SERVER['PHP_SELF']." 'DOMAIN' 'NAME' 'USERID' 'PASSWORD' 'USER' 'PWD_NOT_ENC' 'FORWARD_ADDR' 'MAIL_SIZE_KB' 'GROUP'\n  관리자 추가시    ) ".$_SERVER['PHP_SELF']." 'DOMAIN' 'NAME' 'USERID' 'PASSWORD' 'ADMIN'\n");
}	// if()

// check
	$G_SYS['MAIL_DOMAIN'] = strtolower(trim($_SERVER['argv'][1]));
	$m_name = addslashes($_SERVER['argv'][2]);
	$m_id = addslashes(strtolower(trim($_SERVER['argv'][3])));
	$m_pwd = addslashes($_SERVER['argv'][4]);
	$dm = get_domain($G_SYS['MAIL_DOMAIN']);

	// [2006-03-09] 입력값 검사.
	if (!is_member_id($m_id))
		die("가입실패 : 아이디에는 영문, 숫자, 일부 특수문자(_ . -)만 허용됩니다. => ".$m_id."\n");

	// 메일용량 할당량, 메일계정 할당수 제한
		require_once('include/admin_lib.php');
		mbr_add_limit(0, 0, 0);

	// [2006-03-08] 메일서버가 동작중인지 확인
		mail_server_check_limit();		

	// ID중복검사
	$q = "SELECT count(*) AS cnt FROM ".$TB['MEMBER']." WHERE m_id='$m_id' AND d_no='" . $dm['d_no'] . "'";
	$m_id_cnt = db_get_one($q);
	if ($m_id_cnt > 0)
		die("가입실패 : 이미 가입된 ID입니다.\n=> " . $m_id . "\n");

// proc
	// db
		// default
			#$m_level = $G_MB[DEFAULT_JOIN_LEVEL];
			if (strtoupper($_SERVER['argv'][5]) == 'ADMIN')
			{
				$q = "SELECT count(*) FROM ".$TB['MEMBER'];
				$m_all_cnt = db_get_one($q);
				if ($m_all_cnt < 1)
				{
					echo "최초에 추가하는 회원이므로 [".$G['LEVEL_NAME'][$G[LEVEL][serveradmin]]."]권한을 부여합니다.\n";
					$m_level = $G[LEVEL][serveradmin];
				} else
				{
					$m_level = $G[LEVEL][admin];
				}	// if()
			} else
			{
				$m_level = $G_MB[DEFAULT_JOIN_LEVEL_BYADMIN];
			}	// if()
			$m_regdate = date("Y-m-d H:i:s");
			$m_reghost = $_SERVER[REMOTE_ADDR];
			$m_login_cnt = 1;

		$m_is_use = 'Y';
		$m_forwarding_type = 'N';
		$m_mail_file_group = get_mail_file_group_now($dm['d_no']);
		if ($_SERVER['argv'][8] > 0)
		{
			// [2010-09-30] 메일용량을 100M 로 입력시 인식하도록함.  기본은 KB
			if (strpos($_SERVER['argv'][8], 'M') !== false)
			{
				$m_quota = $_SERVER['argv'][8]*1024;
			} else 
			{
				$m_quota = $_SERVER['argv'][8];
			}	// if()			
		} else 
		{
			$m_quota = $dm['d_quota_mbr_default'];
		}	// if()
		if ($_SERVER['argv'][6] == 'PWDISENC')
		{
			$m_pwd_enc = $m_pwd;
		} else 
		{
			$m_pwd_enc = pwd_enc(stripslashes($m_pwd), stripslashes($m_id));
		}	// if()

		$m_bigfile_quota = $dm['d_bigfile_quota_default'];
		$m_webhard_quota = $dm['d_webhard_quota_default'];


		// [2006-02-28]
		$m_forwarding_type = 'N';
		$m_forwarding = '';
		$m_forwarding_in_myemail = false;
		if ($_SERVER['argv'][7])
		{
			$vars = '';
			$vars .= '"mailbox"'."\r\n";		// 웹메일용처리 - 메일남김.
			$emails = mime_addresses_parse($_SERVER['argv'][7], $G_SYS['DB_TEXT']);
			for ($i=0; $i<sizeof($emails); $i++)
			{
				$_email = trim($emails[$i]['address']);
				if ($_email != $m_id.'@'.$G_SYS[MAIL_DOMAIN])
				{
					// 웹메일용처리 - 포워딩 주소
					if (!$m_forwarding)
					{
						$vars .= '"redirect"';
					}	// if()
					$vars .= "\t".'"'.$_email.'"';
					if ($m_forwarding)
					{
						$m_forwarding .= ',';
					}	// if()
					$m_forwarding .= $_email;
				} else 
				{
					$m_forwarding_in_myemail = true;
				}	// if()
			}	// for()
			$vars .= "\r\n";

			if ($m_forwarding)
			{
				if ($m_forwarding_in_myemail)
				{
					$m_forwarding_type = 'C';
				} else 
				{
					$m_forwarding_type = 'Y';
				}	// if()
			}	// if()
		}	// if()


		// [2008-06-07] 회원 그룹
		$mg_no = NULL;
		$q_insert_fields = '';
		$q_insert_values = '';
		if (trim($_SERVER['argv'][9]) != '')
		{
			// [2010-09-30] 단계별 조직 입력 지원.  단계별 구분자는 | 임.
			// [2011-01-13] 기존처럼 단계별 구분자가 없는 경우는 단계별로 이름과 일치하는 것을 찾도록 함.
			if (strpos($_SERVER['argv'][9], '|') === false)
			{
				$mg_no= db_get_one("SELECT mg_no FROM " . $TB['MEMBER_GROUP'] . " WHERE d_no='" . $dm['d_no'] . "' AND mg_name='" . $_SERVER['argv'][9] . "' ORDER BY mg_depth, mg_sort");
				if (!$mg_no)
				{
					to_db_str(&$_SERVER['argv'][9], 50);
					$_POST['mg_quota_default'] = $_POST['mg_quota_default'] * 1024;

					$sql = "
						INSERT INTO
							" . $TB['MEMBER_GROUP'] . "
							(mg_no, d_no, mg_name, mg_quota_default)
						VALUES
							(".db_sqc_next($TB['MEMBER_GROUP']).", '" . $dm['d_no'] . "', '" . $_SERVER['argv'][9] . "', '" . $dm['d_quota_mbr_default'] . "')
						";
					db_query($sql);

					$mg_no = db_sqc_curr($TB['MEMBER_GROUP']);
				}	// if()
			} else 
			{
				$mg_parent = 0;
				$_ex = explode('|', trim($_SERVER['argv'][9]));
				for ($i=0; $i<sizeof($_ex); $i++)
				{
					$_mg_name = addslashes(trim($_ex[$i]));
					if ($_mg_name != '')
					{
						$mg_no= db_get_one("SELECT mg_no FROM " . $TB['MEMBER_GROUP'] . " WHERE d_no='" . $dm['d_no'] . "' AND mg_parent='" . $mg_parent . "' AND mg_depth='" . ($i+1) . "' AND mg_name='" . $_mg_name . "'");
						if (!$mg_no)
						{
							to_db_str(&$_mg_name, 50);
							$_POST['mg_quota_default'] = $_POST['mg_quota_default'] * 1024;

							$sql = "
								INSERT INTO
									" . $TB['MEMBER_GROUP'] . "
									(mg_no, d_no, mg_parent, mg_depth, mg_name, mg_quota_default)
								VALUES
									(".db_sqc_next($TB['MEMBER_GROUP']).", '" . $dm['d_no'] . "', '" . $mg_parent . "', '" . ($i+1) . "', '" . $_mg_name . "', '" . $dm['d_quota_mbr_default'] . "')
								";
							db_query($sql);

							$mg_no = db_sqc_curr($TB['MEMBER_GROUP']);
						}	// if()
						$mg_parent = $mg_no;
					}	// if()
				}	// for()
			}	// if()

			if (is_numeric($mg_no))
			{
				$q_insert_fields .= ", mg_no";
				$q_insert_values .= ", '".$mg_no."'";
			}	// if()
		}	// if()

		// [2008-06-07] 추가필드
		if (trim($_SERVER['argv'][10]) != '')
		{
			parse_str($_SERVER['argv'][10], $etc);
			foreach ($etc as $key=>$val)
			{
				$val = trim($val);
				if ($val != '')
				{
					$q_insert_fields .= ", ".$key;
					$q_insert_values .= ", '".$val."'";				
				}	// if()
			}	// foreach()
		}	// if()

		// [2008-10-09] 회원직위
		if (trim($_SERVER['argv'][11]) != '')
		{
			$mc_no= db_get_one("SELECT mc_no FROM " . $TB['MEMBER_CLASS'] . " WHERE d_no='" . $dm['d_no'] . "' AND mc_name='" . $_SERVER['argv'][11] . "'");
			if (!$mc_no)
			{
				to_db_str(&$_SERVER['argv'][11], 50);
				$_POST['mg_quota_default'] = $_POST['mg_quota_default'] * 1024;

				$sql = "
					INSERT INTO
						" . $TB['MEMBER_CLASS'] . "
						(mc_no, d_no, mc_name, mc_sort)
					VALUES
						(".db_sqc_next($TB['MEMBER_CLASS']).", '" . $dm['d_no'] . "', '" . $_SERVER['argv'][11] . "', '1')
					";
				db_query($sql);

				$mc_no = db_sqc_curr($TB['MEMBER_CLASS']);
			}	// if()

			if (is_numeric($mc_no))
			{
				$q_insert_fields .= ", mc_no";
				$q_insert_values .= ", '".$mc_no."'";
			}	// if()
		}	// if()


		$q = "
			INSERT INTO
				$TB[MEMBER]
				(m_no, m_id, m_pwd, m_level, m_name, m_regdate, m_reghost, m_login_cnt, d_no, m_is_use, m_mail_file_group, m_quota, m_bigfile_quota, m_webhard_quota, m_forwarding_type, m_forwarding ".$q_insert_fields.")
			VALUES
				(".db_sqc_next($TB['MEMBER']).", '$m_id', '$m_pwd_enc', '$m_level', '$m_name', '$m_regdate', '$m_reghost', '$m_login_cnt', '" . $dm['d_no'] . "', '$m_is_use', '$m_mail_file_group', '$m_quota', '$m_bigfile_quota', '$m_webhard_quota', '$m_forwarding_type', '$m_forwarding' ".$q_insert_values.")
			";
		#echo "\n" . $q;
		db_query($q);
		$curr_m_no = db_sqc_curr($TB['MEMBER']);		// 삽입된 데이타 키

		// [2010-09-30] 조직 갱신
		if ($mg_no)
			$mg_no = member_group_rel_update($curr_m_no, $mg_no, $isReset=false);


	// 웹메일용 처리.
		mbr_add($curr_m_no, $m_id, $m_pwd, $m_quota, $m_mail_file_group);

		$msg = "가입성공 : ".$m_id."(".$G['LEVEL_NAME'][$m_level].")";

		if ($m_forwarding)
		{
			mbr_mailproc_set($m_id, $vars);
			$msg .= ", 포워딩 : ".$m_forwarding;
		}	// if()


	// [2013-07-30] 서버관리자일 경우 예외 처리.
		if ($m_level == $G[LEVEL][serveradmin])
		{
			// SMTP, POP3 서비스를 기본 제한함.
			$q = "UPDATE ".$TB['MEMBER']." SET m_svc_smtp='N', m_svc_pop3='N' WHERE d_no='".$dm['d_no']."' AND m_no='".$curr_m_no."'";
			db_query($q);

			mbr_stats_update($curr_m_no);

			// Linux 서버일 경우, root 앨리어스 주소 추가
			if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
			{
				// 앨리어스 주소 추가
					$_POST['m_id'] = 'root';
					$_POST['m_name'] = $m_id;
					$_POST['m_cfg_from_addr'] = 'N';

					$m_usertype = 'A';		// Alias User
					$m_mail_file_group = get_mail_file_group_now($dm['d_no']);
					// not null - m_no, d_no, m_id, m_pwd, m_level, m_name, m_is_use, m_mail_file_group, m_quota, m_bigfile_quota, m_webhard_quota, m_forwarding_type, m_regdate, m_reghost, m_login_cnt, m_autoreply_isuse, m_svc_smtp, m_svc_pop3, m_usertype
					$q = "INSERT INTO ".$TB['MEMBER']." (m_no, d_no, m_id, m_pwd, m_level, m_name, m_is_use, m_mail_file_group, m_quota, m_bigfile_quota, m_webhard_quota, m_forwarding_type, m_regdate, m_reghost, m_login_cnt, m_autoreply_isuse, m_svc_smtp, m_svc_pop3, m_cfg_from_addr, m_usertype, m_memo)";
					$q .= " VALUES (".db_sqc_next($TB['MEMBER']).", '".$dm['d_no']."', '".$_POST['m_id']."', '', 0, '".$_POST['m_name']."', 'Y', '".$m_mail_file_group."', 0, 0, 0, 'N', '".date("Y-m-d H:i:s")."', '".$_SERVER['REMOTE_ADDR']."', 0, 'N', 'N', 'N', '".$_POST['m_cfg_from_addr']."', '".$m_usertype."', '".$_POST['m_memo']."')";
					db_query($q);

				// 웹메일용 처리.
					mbr_alias_add($_POST['m_name'], $_POST['m_id']);				
			}	// if()
		}	// if()

		echo $msg."\n";


// [2009-06-26] 설치프로그램 보완
	if ($_SERVER['argv'][6] == 'FROM_INSTALL')
		echo '__NMAIL_PHP_INSTALL_EXEC_OK__';

#require_once('include/global_end.php');
?>