📄 isapimagick.c
字号:
*lpszQuery, *lpszHeader=NULL, *lpszTemp=NULL; BOOL Success=FALSE; DWORD dwTotalBytes=0, dwLen=0; impersonating=False; pECB->dwHttpStatusCode=0; // 0 Failure if (!stricmp(pECB->lpszMethod, "get")) { lpszQuery = pECB->lpszQueryString; dwTotalBytes = lstrlen(lpszQuery); Success=TRUE; } else if (!stricmp(pECB->lpszMethod, "post")) { if(pECB->cbTotalBytes > 0) { DWORD cbQuery; dwTotalBytes=pECB->cbTotalBytes; lpszTemp = (char*)LocalAlloc(LPTR, dwTotalBytes+1); if (!lpszTemp) return HSE_STATUS_ERROR; cbQuery = pECB->cbTotalBytes - pECB->cbAvailable; if (cbQuery > 0) { pECB->ReadClient(pECB->ConnID, (LPVOID) (lpszTemp + pECB->cbAvailable),&cbQuery); } strncpy(lpszTemp, pECB->lpbData, pECB->cbAvailable); lpszTemp[dwTotalBytes]='\0'; lpszQuery = lpszTemp; Success=TRUE; } } if (Success) { status=CGIToArgv(lpszQuery,&argc,&argv); if (status == True) { char szMimeType[MaxTextExtent], szPathTranslated[MaxTextExtent]; DWORD dwBuffSize; HSE_SEND_HEADER_EX_INFO HeaderExInfo; dwBuffSize = MaxTextExtent; szPathTranslated[0] = '\0'; if (pECB->GetServerVariable(pECB->ConnID, "PATH_TRANSLATED",szPathTranslated,&dwBuffSize)) { GetFileMimeType(szPathTranslated, szMimeType,MaxTextExtent); } else strcpy(szMimeType,"application/ocetet-stream"); for (argc_hw=1; argc_hw < argc; argc_hw++) { char *blob_data, szHeaders[MaxTextExtent]; size_t blob_length; Image *image; ImageInfo *image_info; int mode=0; argv_hw = &argv[argc_hw]; if (LocaleNCompare("-login",argv[argc_hw],8) == 0) { for (i=argc_hw; i < argc; i++) { if (LocaleNCompare("login-",argv[i],8) == 0) break; }#if defined(WIN32) if ((i-argc_hw)>3) { char *domain=argv_hw[1], *userid=argv_hw[2], *passwd=argv_hw[3]; HANDLE hToken; BOOL status; status = LogonUser(userid,domain,passwd, LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hToken); if (status) { status = ImpersonateLoggedOnUser(hToken); if (status) impersonating=True; else errmsg = NTGetLastError(); } else errmsg = NTGetLastError(); }#endif argc_hw = i+1; argv_hw = &argv[argc_hw]; } if (LocaleNCompare("-convert",argv[argc_hw],8) == 0) { for (i=argc_hw; i < argc; i++) { if (LocaleNCompare("-xbdat",argv[i],6) == 0) { argv[i+1]=(char *)(&blob_data); mode=1; } else if (LocaleNCompare("-xblen",argv[i],6) == 0) { argv[i+1]=(char *)(&blob_length); mode=1; } else if (LocaleNCompare("-xfunc",argv[i],6) == 0) { argv[i+1]=(char *)CGIFifo; mode=2; } else if (LocaleNCompare("-xctxt",argv[i],6) == 0) { argv[i+1]=(char *)pECB; mode=2; } else if (LocaleNCompare("-xinfo",argv[i],6) == 0) { argv[i+1]=(char *)(&image_info); mode=3; } else if (LocaleNCompare("-ximag",argv[i],6) == 0) { argv[i+1]=(char *)(&image); mode=3; } else if (LocaleNCompare("convert-",argv[i],8) == 0) break; } if (mode==0) { convert_main(i-argc_hw,argv_hw); } if (mode==1) { blob_length=8192; convert_main(i-argc_hw,argv_hw); dwLen=blob_length; sprintf(szHeaders, "Content-Length: %u\r\nContent-Type: %s\r\n\r\n", dwLen,szMimeType); HeaderExInfo.pszStatus = "200 OK"; HeaderExInfo.pszHeader = szHeaders; HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus ); HeaderExInfo.cchHeader = strlen( szHeaders ); HeaderExInfo.fKeepConn = FALSE; if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX,&HeaderExInfo,NULL,NULL)) return HSE_STATUS_ERROR; if (!pECB->WriteClient( pECB->ConnID, blob_data, &dwLen, 0)) return HSE_STATUS_ERROR; } if (mode==2) { sprintf(szHeaders,"Content-Type: %s\r\n\r\n",szMimeType); HeaderExInfo.pszStatus = "200 OK"; HeaderExInfo.pszHeader = szHeaders; HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus ); HeaderExInfo.cchHeader = strlen( szHeaders ); HeaderExInfo.fKeepConn = FALSE; if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX,&HeaderExInfo,NULL,NULL)) return HSE_STATUS_ERROR; convert_main(i-argc_hw,argv_hw); } if (mode==3) { convert_main(i-argc_hw,argv_hw); } argc_hw = i+1; argv_hw = &argv[argc_hw]; } if (LocaleNCompare("-combine",argv[argc_hw],8) == 0) { for (i=argc_hw; i < argc; i++) { if (LocaleNCompare("-xbdat",argv[i],6) == 0) { argv[i+1]=(char *)(&blob_data); mode=1; } else if (LocaleNCompare("-xblen",argv[i],6) == 0) { argv[i+1]=(char *)(&blob_length); mode=1; } else if (LocaleNCompare("-xfunc",argv[i],6) == 0) { argv[i+1]=(char *)CGIFifo; mode=2; } else if (LocaleNCompare("-xctxt",argv[i],6) == 0) { argv[i+1]=(char *)pECB; mode=2; } else if (LocaleNCompare("-xinfo",argv[i],6) == 0) { argv[i+1]=(char *)(&image_info); mode=3; } else if (LocaleNCompare("-ximag",argv[i],6) == 0) { argv[i+1]=(char *)(&image); mode=3; } else if (LocaleNCompare("combine-",argv[i],8) == 0) break; } if (mode==0) { combine_main(i-argc_hw,argv_hw); } if (mode==1) { blob_length=8192; combine_main(i-argc_hw,argv_hw); dwLen=blob_length; sprintf(szHeaders, "Content-Length: %u\r\nContent-Type: %s\r\n\r\n", dwLen,szMimeType); HeaderExInfo.pszStatus = "200 OK"; HeaderExInfo.pszHeader = szHeaders; HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus ); HeaderExInfo.cchHeader = strlen( szHeaders ); HeaderExInfo.fKeepConn = FALSE; if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX,&HeaderExInfo,NULL,NULL)) return HSE_STATUS_ERROR; if (!pECB->WriteClient( pECB->ConnID, blob_data, &dwLen, 0)) return HSE_STATUS_ERROR; } if (mode==2) { sprintf(szHeaders,"Content-Type: %s\r\n\r\n",szMimeType); HeaderExInfo.pszStatus = "200 OK"; HeaderExInfo.pszHeader = szHeaders; HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus ); HeaderExInfo.cchHeader = strlen( szHeaders ); HeaderExInfo.fKeepConn = FALSE; if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX,&HeaderExInfo,NULL,NULL)) return HSE_STATUS_ERROR; combine_main(i-argc_hw,argv_hw); } if (mode==3) { combine_main(i-argc_hw,argv_hw); } argc_hw = i+1; argv_hw = &argv[argc_hw]; } } } // BUG: must free all the strings pointed to by argv not just argv LiberateMemory((void **) &argv); } if (impersonating==True) {#if defined(WIN32) status = RevertToSelf(); if (status) impersonating=False; else errmsg = NTGetLastError();#endif } pECB->dwHttpStatusCode=200; // 200 OK if (lpszTemp) LocalFree(lpszTemp); return HSE_STATUS_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -