Esempio n. 1
0
/*----------------------------------------------------------------------
函数名称:      int UserNumberExist(char *userNumber)
作用:          对用户输入的工号进行确认
参数:          char *userNumber 用户工号
返回值:        返回类型    int
                返回结果    0   工号位数不正确
                            1   工号正确
                            2   工号不正确
                            3   工号输入不正确并超过三次
创建日期:      2005.9
创建人:         莫远明
最后修改日期:   2008.5
最后修改人:     王海伟
----------------------------------------------------------------------*/
BOOL UserNumberExist(char *userNumber)
{
	int i ;
	BOOL ret = F;
	long  int  rowscount;
	rowscount=atol(CollectHead.Recordcount);
	for(i=0;i<rowscount;i++)
	{

		if(0==strncmp(userNumber,MsgCollect[i].collno,Getg_userNumberLen()))
		{

			SetG_User_Index (i);
			SetG_collectType(GetUserGroup(MsgCollect[i].identify[0]));
			Setg_szName(MsgCollect[i].collname);
			SetG_Number(MsgCollect[i].collno);
			ret =T;
			break;
		}
	}
	if(!ret)
	{
		
		if (0 == strncmp(userNumber, "8888888888", Getg_userNumberLen()))
		{
			SetG_collectType(GetUserGroup('1'));
			Setg_szName("收费员测试账号");
			ret = T;
		} else if (0 == strncmp(userNumber, "9999999999", Getg_userNumberLen()))
		{
			SetG_collectType(GetUserGroup('9'));
			Setg_szName("未知测试员账号");
			ret = T;
		}
		else if (0 == strncmp(userNumber, "0000000000", Getg_userNumberLen()))
		{
			SetG_collectType(GetUserGroup('2'));
			Setg_szName("维护员测试账号");
			ret = T;
		}
		else if (0 == strncmp(userNumber, "7777777777", Getg_userNumberLen()))
		{
			SetG_collectType(GetUserGroup('1'));
			Setg_szName("维护员测试账号");
			ret = T;
		}
	}
	return ret;
}
Esempio n. 2
0
/*----------------------------------------------------------------------
函数名称:      int UserNumberExist(char *userNumber)
作用:          对用户输入的工号进行确认
参数:          char *userNumber 用户工号
返回值:        返回类型    int
                返回结果    0   工号位数不正确
                            1   工号正确
                            2   工号不正确
                            3   工号输入不正确并超过三次
创建日期:      2005.9
创建人:         莫远明
最后修改日期:   2008.5
最后修改人:     王海伟
----------------------------------------------------------------------*/
BOOL UserNumberExist(char *userNumber)
{
	int i ;
	BOOL ret = F;
	long  int  rowscount;
	rowscount=atol(CollectHead.Recordcount);
	for(i=0;i<rowscount;i++)
	{

		if(0==strncmp(userNumber,MsgCollect[i].collno,Getg_userNumberLen()))
		{

			SetG_User_Index (i);
			SetG_collectType(GetUserGroup(MsgCollect[i].identify[0]));
			Setg_szName(MsgCollect[i].collname);
			SetG_Number(MsgCollect[i].collno);
			ret =T;
			break;
		}
	}
	if(!ret)
	{
		if(0==strncmp(userNumber,"7777777777",Getg_userNumberLen()))
		{

			SetG_collectType("1");
			Setg_szName("开发测试工号");
			ret =T;
		}
		else if(0==strncmp(userNumber,"555555555",Getg_userNumberLen()))
		{
			SetG_collectType("9");
			Setg_szName("配置工号");
			ret =T;
		}
	}	
	return ret;
}
Esempio n. 3
0
void CUser::Attack(Packet & pkt)
{
	int16 sid = -1, tid = -1, damage, delaytime, distance;	
	uint8 bType, bResult = 0;	
	Unit * pTarget = nullptr;

	pkt >> bType >> bResult >> tid >> delaytime >> distance;

	//	delaytime = delaytime / 100.0f;
	//	distance = distance / 10.0f;

	if (isIncapacitated())
		return;

	if (isInSafetyArea())
		return;

	if (m_bInvisibilityType != INVIS_NONE)
	{
		CMagicProcess::RemoveStealth(this, INVIS_DISPEL_ON_MOVE);
		CMagicProcess::RemoveStealth(this, INVIS_DISPEL_ON_ATTACK);
	}

	// If you're holding a weapon, do a client-based (ugh, do not trust!) delay check.
	_ITEM_TABLE *pTable = GetItemPrototype(RIGHTHAND);
	if (pTable != nullptr) 
	{
		if (delaytime < (pTable->m_sDelay + 10) // client adds 0.1 onto the interval (0.1 of 100 is 10)
			|| distance > pTable->m_sRange)
			return;	
	}
	// Empty handed.
	else if (delaytime < 100)
		return;			

	pTarget = g_pMain->GetUnitPtr(tid);
	bResult = ATTACK_FAIL;

	if (pTarget != nullptr 
		&& isInAttackRange(pTarget)
		&& CanAttack(pTarget))
	{
		if (isAttackable(pTarget) && CanCastRHit(GetSocketID()))
		{
			if (isInTempleEventZone())
				if (GetUserGroup() != -1 && !isSameUserGroup(pTarget))
					return;

			CUser *pUser = g_pMain->GetUserPtr(GetSocketID());
			if (pUser != nullptr)
				pUser->m_RHitRepeatList.insert(std::make_pair(GetSocketID(), UNIXTIME));

			damage = GetDamage(pTarget);

			// Can't use R attacks in the Snow War.
			if (GetZoneID() == ZONE_SNOW_BATTLE 
				&& g_pMain->m_byBattleOpen == SNOW_BATTLE)
				damage = 0;

			if (damage > 0)
			{
				pTarget->HpChange(-damage, this);
				if (pTarget->isDead())
					bResult = ATTACK_TARGET_DEAD;
				else
					bResult = ATTACK_SUCCESS;

				// Every attack takes a little of your weapon's durability.
				ItemWoreOut(ATTACK, damage);

				// Every hit takes a little of the defender's armour durability.
				if (pTarget->isPlayer())
					TO_USER(pTarget)->ItemWoreOut(DEFENCE, damage);
			}
		}
	}

	Packet result(WIZ_ATTACK, bType);
	result << bResult << GetSocketID() << tid;
	SendToRegion(&result);
}
//------------------------------------------------------------------------------
BOOL registry_users_extract(sqlite3 *db, unsigned int session_id)
{
  BOOL ok = FALSE;
  DWORD userRID;
  USERS_INFOS User_infos;

  //import syskey
  char sk[MAX_PATH]="";
  BOOL syskeyok = registry_syskey_local(sk, MAX_PATH);

  //get current computer name
  char computer_name[COMPUTER_NAME_SIZE_MAX]="";
  DWORD taille = COMPUTER_NAME_SIZE_MAX;
  GetComputerName(computer_name,&taille);

  //Set ACL in registry
  int ret = set_sam_tree_access(HKEY_LOCAL_MACHINE,"SECURITY\\SAM\\Domains\\Account\\Users");
  if (ret == 0)
  {
    //get reference key for users hashs
    HKEY CleTmp;
    BOOL ok_test;
    BYTE b_f[MAX_LINE_SIZE];
    if(ReadValue(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account", "F", (char*)b_f, MAX_LINE_SIZE)<= 0x80)b_f[0] = 0;

    //get users
    if (RegOpenKey(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\",&CleTmp)==ERROR_SUCCESS)
    {
      DWORD i, valueSize, SizeSubKeyName, nbSubKey = 0;
      if (RegQueryInfoKey (CleTmp,0,0,0,&nbSubKey,0,0,0,0,0,0,0)==ERROR_SUCCESS)
      {
        char SubKeyName[MAX_PATH], path[MAX_PATH], buffer[MAX_LINE_SIZE], cbuffer[MAX_LINE_SIZE];

        for (i=0;i<nbSubKey;i++)
        {
          ok_test       = FALSE;
          SizeSubKeyName=MAX_PATH;// on reinitialise la taille a chaque fois sinon il ne lit pas la valeur suivant
          SubKeyName[0] = 0;
          if(RegEnumKeyEx (CleTmp,i,SubKeyName,&SizeSubKeyName,0,0,0,0)!=ERROR_SUCCESS)continue;

          //read value
          snprintf(path,MAX_PATH,"SAM\\SAM\\Domains\\Account\\Users\\%s",SubKeyName);

          //F value
          cbuffer[0]= 0;
          buffer[0] = 0;
          userRID   = 0;
          valueSize = ReadValue(HKEY_LOCAL_MACHINE, path, "F", buffer, MAX_LINE_SIZE);
          if (valueSize)
          {
            DataToHexaChar(buffer, valueSize, cbuffer, MAX_LINE_SIZE);
            userRID = TestUserDataFromSAM_F(&User_infos,cbuffer);
            ok_test = TRUE;
         }

          //V value
          cbuffer[0]= 0;
          buffer[0] = 0;
          valueSize = ReadValue(HKEY_LOCAL_MACHINE, path, "V", buffer, MAX_LINE_SIZE);
          if (valueSize)
          {
            //read datas
            DataToHexaChar(buffer, valueSize, cbuffer, MAX_LINE_SIZE);
            if(TestUserDataFromSAM_V(&User_infos,cbuffer,computer_name))
            {
              //test if rid and sid ok
              userRID = HTDF(SubKeyName,8);
              if(User_infos.RID[0] == 0)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID);
              if(User_infos.SID[0] == 0)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID);
           }else
            {
              if((User_infos.RID[0] == 0) && userRID)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID);
              if((User_infos.SID[0] == 0) && userRID)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID);
            }
            ok_test = TRUE;
          }else
          {
            if((User_infos.RID[0] == 0) && userRID)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID);
            if((User_infos.SID[0] == 0) && userRID)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID);
         }

          if (!ok_test)continue;

          //get groups
          if (userRID) GetUserGroup(userRID, User_infos.group, MAX_PATH);

          //get hashs
          if((b_f[0] != 0) && syskeyok)
          {
            DecodeSAMHashXP(sk,User_infos.pwdump_pwd_raw_format,userRID,User_infos.name,b_f);
          }

          //add user
          convertStringToSQL(User_infos.description, MAX_PATH);
          addRegistryUsertoDB("HKEY_LOCAL_MACHINE\\SAM",User_infos.name, User_infos.RID, User_infos.SID, User_infos.group,
                              User_infos.description, User_infos.last_logon, User_infos.last_password_change,
                              User_infos.nb_connexion, User_infos.type, User_infos.state_id,session_id, db);

          //add password
          if (TEST_REG_PASSWORD_ENABLE)
            addPasswordtoDB("HKEY_LOCAL_MACHINE\\SAM", User_infos.name, User_infos.pwdump_pwd_format, User_infos.pwdump_pwd_raw_format, REG_PASSWORD_STRING_LOCAL_USER, session_id, db);
          ok = TRUE;
        }
      }
      RegCloseKey(CleTmp);
    }
  }

  //Restore ACL in registry
  restore_sam_tree_access(HKEY_LOCAL_MACHINE,"SECURITY\\SAM\\Domains\\Account\\Users");

  return ok;
}