bool MakeRunParamStringByID(std::list<string> & lrun, const string & entityID, string entityTplId="") { string szRun(""), szDeviceType(entityTplId); MAPNODE mainnode; if(entityTplId.empty()) { OBJECT objDevice = Cache_GetEntity(entityID); if(objDevice == INVALID_VALUE) return false; mainnode = GetEntityMainAttribNode(objDevice); if(mainnode == INVALID_VALUE) return false; szDeviceType.clear(); if(!FindNodeValue(mainnode, "sv_devicetype", szDeviceType)) return false; } map<string, string, less<string> > lsDeviceParam; OBJECT objDeviceTmp = Cache_GetEntityTemplet(szDeviceType); if(objDeviceTmp != INVALID_VALUE) { LISTITEM lsItem; if( FindETContrlFirst(objDeviceTmp, lsItem)) { MAPNODE objNode; while( (objNode = FindNext(lsItem)) != INVALID_VALUE ) { string szName (""), szRun (""); string szType (""); // 得到参数名称,是否是必要参数,以及数据类型 FindNodeValue(objNode, "sv_name", szName); FindNodeValue(objNode, "sv_run", szRun); FindNodeValue(objNode, "sv_type", szType); if(szRun == "true") lsDeviceParam[szName] = szType; } } } // 在当前设备中枚举每一个必要运行参数 map<string, string, less<string> >::iterator lstItem; for(lstItem = lsDeviceParam.begin(); lstItem != lsDeviceParam.end(); lstItem ++) { string szValue (""); FindNodeValue(mainnode, (lstItem->first), szValue); if((lstItem->second).compare("password") == 0) { char szOutput[2048] = {0}; Des des; if(des.Decrypt(szValue.c_str(), szOutput)) szValue = szOutput; } //szValue = url_Encode(szValue.c_str()); szRun = (lstItem->first) + "=" + szValue; lrun.push_back(szRun); } return true; }
BOOL AcceptPrintf(char * pidEventName) { char **initialEnv = environ; SYSTEMTIME mytime; //read from register to obtain ECC web root path, usually: c:\siteview\siteview ecc\fcg-bin std::string szPath = GetSiteViewRootPath(); szPath += "\\data\\svdbconfig.ini"; INIFile theINI = LoadIni(szPath.c_str()); //set language code (English or Chinese) std::string szTSec = GetIniSetting(theINI, "svdb", "DefaultLanguage"); szTSec += "_code"; std::string m_code = GetIniSetting(theINI, "svdb", szTSec.c_str()); //WriteLog("before accept"); if(FCGI_Accept()>=0) { char wcookie[256]; char *qrystr; char *p; int nSvsid; //char szWrite[256]; char ** myenviron; myenviron =FCGI_GetEnv(); char myenviron1[4096]={0}; for(int i=0 ;myenviron[i];++i) { strcpy(myenviron1,myenviron[i]); putenv(myenviron[i]); } //check if the remoteIP is allowed to log into the system std::string strAcceptIp; strAcceptIp = GetIniFileString("IPCheck","IPAddress","", "general.ini"); int nIsChecked; nIsChecked = GetIniFileInt("IPCheck","isCheck",0, "general.ini"); char *ca,*cb,*cc; char *szAcceptIp; int nSize; char *remoteip=NULL; remoteip = getenv("REMOTE_ADDR"); OutputDebugString(remoteip); OutputDebugString("\n"); bool bAccept =false; nSize = static_cast<int>(strAcceptIp.size()); if( (nIsChecked==1)&&(nSize>0)&&(remoteip!=NULL) ) { szAcceptIp = new char[nSize+1]; memset(szAcceptIp,0,nSize); strcpy(szAcceptIp,strAcceptIp.c_str()); //remoteip = "192.168.5.6"; //remoteip = "127.0.0.1"; if(strcmp(remoteip,"127.0.0.1")!=0) { ca =szAcceptIp; //cb =szAcceptIp; //cc =szAcceptIp; while(ca) { cb= strchr(ca,','); if(cb) *cb=0; cc= strchr(ca,'*'); if(cc) *cc=0; if(strstr(remoteip,ca) !=NULL) { bAccept= true; } if(!cb||bAccept==true) break; if(cb) ca=cb+1; } }else bAccept= true; delete(szAcceptIp); } else bAccept =true;//no need to check IP //Get方式 qrystr=getenv("HTTP_COOKIE"); nSvsid =0; if(qrystr) { if(strlen(qrystr)>0) { sprintf(wcookie,"%s",qrystr); p=strstr(wcookie,"svsid="); if(p!=NULL) { sscanf(p,"svsid=%d",&nSvsid); } } } if(nSvsid==0) nSvsid =GetCurrentProcessId(); //Post方式 string strPost = FuncGetDataByPostMethod(); WriteLog("poststring:\n"); WriteLog(strPost.c_str()); //取值 #if 1 CSVQueryString strQuery(strPost.c_str()); string strAccountVlaue; string strPwdVlaue ; #ifdef ShanTou strAccountVlaue= strQuery.Get_KeyValue("Account"); strPwdVlaue = strQuery.Get_KeyValue("Password"); strIsEipVlaue = strQuery.Get_KeyValue("IsEip"); #else strAccountVlaue= strQuery.Get_KeyValue("Account"); strPwdVlaue = strQuery.Get_KeyValue("Password"); #endif #else string strAccountVlaue="admin"; string strPwdVlaue ="1111" ; #endif string str = ""; //验证 char strUserId[20]; if((bAccept==false) || !IsLogin(strAccountVlaue.c_str(), strPwdVlaue.c_str(),strUserId)) {//用户名/密码认证失败 //标准头 printf("Content-type: text/html charset=gb2312 \r\n"); printf("Content-Language: zh-CN\r\n"); printf("Set-Cookie: svsid=%d\r\n" ,nSvsid ); printf("\r\n"); if(strIsEipVlaue == "true") { printf("User Account Or Passsword is Error!"); } else { printf("nameerror"); } return FALSE; } else //用户名/密码登陆成功 { SafeDog pSafeDog; bool IsDogExit=false; if(pSafeDog.DogOnUsb(IsDogExit) == 0) { if(IsDogExit == true) {//加密狗认证失败 TTime mStopTime; if(pSafeDog.GetStopTime(mStopTime) == 0 ) { TTime mNowTime; mNowTime = TTime::GetCurrentTimeEx(); if(mStopTime < mNowTime) {//过期了 //标准头 printf("Content-type: text/html charset=gb2312 \r\n"); printf("Content-Language: zh-CN\r\n"); printf("Set-Cookie: svsid=%d\r\n" ,nSvsid ); printf("\r\n"); if(strIsEipVlaue == "true") { printf("System Is OverDue!"); } else { printf("sysout"); } return FALSE; } } else { Des OneDes; char strDes[1024]={0}; std::string strDataNum = GetIniFileString("license", "starttime", "", "general.ini"); if(strDataNum.size()>0) { if( OneDes.Decrypt(strDataNum.c_str(),strDes) ) { strDataNum=strDes; if(!strDataNum.empty()) { std::string LastData = GetIniFileString("license", "lasttime", "", "general.ini"); if(!LastData.empty()) { if( OneDes.Decrypt(LastData.c_str(),strDes) ) { LastData=strDes; TTime mStopTime(atoi(strDataNum.substr(0,4).c_str()),atoi(strDataNum.substr(5,2).c_str()),atoi(strDataNum.substr(8,2).c_str()),0,0,0); TTimeSpan AddData(atoi(LastData.c_str()),0,0,0); mStopTime += AddData; TTime mNowTime; mNowTime = TTime::GetCurrentTimeEx(); if(mStopTime < mNowTime) { //标准头 printf("Content-type: text/html charset=gb2312 \r\n"); printf("Content-Language: zh-CN\r\n"); printf("Set-Cookie: svsid=%d\r\n" ,nSvsid ); printf("\r\n"); if(strIsEipVlaue == "true") { printf("System Is OverDue!"); } else { printf("sysout"); } return FALSE; } } } } } } } } IsDogExit=false; } else { Des OneDes; char strDes[1024]={0}; std::string strDataNum = GetIniFileString("license", "starttime", "", "general.ini"); if(strDataNum.size()>0) { if( OneDes.Decrypt(strDataNum.c_str(),strDes) ) { strDataNum=strDes; if(!strDataNum.empty()) { std::string LastData = GetIniFileString("license", "lasttime", "", "general.ini"); if(!LastData.empty()) { if( OneDes.Decrypt(LastData.c_str(),strDes) ) { LastData=strDes; int nYear = 0, nMonth = 0, nDay = 0, nHour = 0, nMin = 0, nSec = 0; sscanf(strDataNum.c_str(), "%d-%d-%d", &nYear, &nMonth, &nDay); char buf[100]={0}; sprintf(buf,"year:%d,mouth:%d,day:%d\n",nYear,nMonth,nDay); TTime mStopTime(nYear, nMonth, nDay, 0,0,0); TTimeSpan AddData(atoi(LastData.c_str()),0,0,0); mStopTime += AddData; TTime mNowTime; mNowTime = TTime::GetCurrentTimeEx(); if(mStopTime < mNowTime) { //标准头 printf("Content-type: text/html charset=gb2312 \r\n"); printf("Content-Language: zh-CN\r\n"); printf("Set-Cookie: svsid=%d\r\n" ,nSvsid ); printf("\r\n"); if(strIsEipVlaue == "true") { printf("System Is OverDue!"); } else { printf("sysout"); } return FALSE; } } } } } } } //登陆成功 printf("Content-type: text/html\r\n"); printf("Set-Cookie: svsid=%d\r\n" ,nSvsid ); #ifdef IDC_Version string strIdcUserId = GetIniFileString(strUserId, "IdcUserId", "", "idcuser.ini"); printf("Set-Cookie: idcuserid=%s\r\n" ,strIdcUserId.c_str()); #endif printf("Set-Cookie: userid=%s\r\n" ,strUserId); printf("\r\n"); if(strIsEipVlaue == "true") { printf("<script type='text/javascript'>"); printf("location.replace(\"/fcgi-bin/showhtm.cgi?nav.htm\")"); printf("</script>"); } else { printf("true"); } } FCGI_Finish(); return TRUE; } else { return FALSE; } }
bool TryDecryptValue2(ForestMap & fmap, string section, string type, string & estr, bool isDecrypt) { if(section.empty() || type.empty() ) return false; std::set<string> encoded; if(!prepareToDecryptValue(encoded,fmap,section,type,estr)) return false; ForestMap::const_iterator mit= fmap.find(section); if(mit == fmap.end()) { estr+= " cannot find section in fmap. "; return false; } std::set<string>::iterator eit; string name,value,putin,strret; for(NodeData::const_iterator nit= mit->second.begin(); nit!=mit->second.end(); ++nit) { name= nit->first; value= nit->second; char temp1[50]={0}; char temp2[50]={0}; sprintf(temp1, "name = %s", name.c_str()); myPrintLog(temp1); sprintf(temp2, "value = %s", value.c_str()); myPrintLog(temp2); if(value.empty()) continue; int signal(0); eit= encoded.find(name); if(eit!=encoded.end()) { char temp3[50]={0}; sprintf(temp3,"===isDecrypt = %d ===find name = %s", isDecrypt, name.c_str()); myPrintLog(temp3); Des mydes; char out[2048]={0}; if( isDecrypt && mydes.Decrypt( value.c_str(), out) ) { myPrintLog("解密"); strret=out; char temp[50]; sprintf(temp, "===解strret = %s", strret.c_str()); myPrintLog(temp); PutReturnForestMap(fmap,section,name,strret); } if( !isDecrypt && mydes.Encrypt( value.c_str(), out) ) { myPrintLog("加密"); strret=out; char temp[50]; sprintf(temp, "===加strret = %s", strret.c_str()); myPrintLog(temp); PutReturnForestMap(fmap,section,name,strret); } } } return true; }
//验证用户 bool IsLogin(string strAccount, string strPwd,char* strUserId) { OutputDebugString("IsLogin"); OutputDebugString("\n"); WriteLog("IsLogin"); WriteLog("\n"); //去空格 strAccount.erase(strAccount.begin(),strAccount.begin() + strAccount.find_first_not_of('+')); strAccount.erase(strAccount.begin(),strAccount.begin() + strAccount.find_first_not_of(' ')); strAccount.erase(strAccount.begin() + strAccount.find_last_not_of('+') + 1,strAccount.end()); strAccount.erase(strAccount.begin() + strAccount.find_last_not_of(' ') + 1,strAccount.end()); //转换成小写 transform(strAccount.begin(),strAccount.end(),strAccount.begin(),(int(*)(int))tolower); if(strAccount == "" && strPwd == "") return false; std::list<string> keylist; std::list<string>::iterator keyitem; string strUserName, strUserPwd; bool bExist = false; //从ini获取用户列表 #ifdef IDC_Version if(GetIniFileSections(keylist, "idcuser.ini")) #else if(GetIniFileSections(keylist, "user.ini")) #endif { //从ini初始化用户列表 for(keyitem = keylist.begin(); keyitem != keylist.end(); keyitem ++) { //从ini读数据 #ifdef IDC_Version strUserName = GetIniFileString((*keyitem), "LoginName", "", "idcuser.ini"); #else strUserName = GetIniFileString((*keyitem), "LoginName", "", "user.ini"); #endif //转换成小写 transform(strUserName.begin(),strUserName.end(),strUserName.begin(),(int(*)(int))tolower); #ifdef IDC_Version strUserPwd = GetIniFileString((*keyitem), "Password", "", "idcuser.ini"); #else strUserPwd = GetIniFileString((*keyitem), "Password", "", "user.ini"); #endif Des mydes; char dechar[1024]={0}; if(strPwd.size()>0) { mydes.Decrypt(strUserPwd.c_str(),dechar); strUserPwd = dechar; } //汕头版本 用MD5解密strUserPwd #ifdef ShanTou if(strIsEipVlaue == "true") { //OutputDebugString(strUserPwd.c_str()); //OutputDebugString("\n"); WriteLog(strUserPwd.c_str()); WriteLog("\n"); string strTmpPwd = strUserPwd; //strTmpPwd = "test"; int ilen = strTmpPwd.length(); unsigned char output[16]; MD5(output, (const unsigned char *)strTmpPwd.c_str(), ilen); strUserPwd = ""; //strPwd = output; //strUserPwd.append((char*)output); //OutputDebugString((char*)output); char tmpbuf[2]; for(int i =0; i< 16;i++) { sprintf(tmpbuf, "%02x", output[i]); //WriteLog((char*)tmpbuf); strUserPwd.append((char*)tmpbuf); } for(int i=0;i<strUserPwd.length();i++) { strUserPwd[i]=toupper(strUserPwd[i]); } //OutputDebugString(strUserPwd.c_str()); //OutputDebugString("\n"); WriteLog(strUserPwd.c_str()); WriteLog("\n"); } else { } if(strUserName == strAccount && strUserPwd == strPwd) #else if(strUserName == strAccount && strUserPwd == strPwd) #endif { //是否禁用?... #ifdef IDC_Version int nIsUse = GetIniFileInt((*keyitem), "nIsUse", -1, "idcuser.ini"); #else int nIsUse = GetIniFileInt((*keyitem), "nIsUse", -1, "user.ini"); #endif if(nIsUse == -1) { //禁用 bExist = false; } else { //可用 bExist = true; sprintf(strUserId,"%s",keyitem->c_str()); //strUserId=keyitem->c_str(); } //bExist = true; break; } } } return bExist; }