Fix indentation of win32 files.

pull/91/head
Eric Leblond 13 years ago
parent 710d237724
commit 9f13572843

@ -31,78 +31,78 @@
void setenv(const char *name, const char *value, int overwrite) void setenv(const char *name, const char *value, int overwrite)
{ {
if (overwrite || NULL == getenv(name)) { if (overwrite || NULL == getenv(name)) {
char *str = SCMalloc(strlen(name) + strlen(value) + 2); char *str = SCMalloc(strlen(name) + strlen(value) + 2);
if (unlikely(str == NULL)) if (unlikely(str == NULL))
return; return;
snprintf(str, strlen(name) + strlen(value) + 1, "%s=%s", name, value); snprintf(str, strlen(name) + strlen(value) + 1, "%s=%s", name, value);
putenv(str); putenv(str);
SCFree(str); SCFree(str);
} }
} }
void unsetenv(const char *name) void unsetenv(const char *name)
{ {
char *str = SCMalloc(strlen(name) + 2); char *str = SCMalloc(strlen(name) + 2);
if (unlikely(str == NULL)) if (unlikely(str == NULL))
return; return;
snprintf(str, strlen(name) + 1, "%s=", name); snprintf(str, strlen(name) + 1, "%s=", name);
putenv(str); putenv(str);
SCFree(str); SCFree(str);
} }
const char* inet_ntop(int af, const void *src, char *dst, uint32_t cnt) const char* inet_ntop(int af, const void *src, char *dst, uint32_t cnt)
{ {
if (af == AF_INET) if (af == AF_INET)
{ {
struct sockaddr_in in; struct sockaddr_in in;
memset(&in, 0, sizeof(in)); memset(&in, 0, sizeof(in));
in.sin_family = AF_INET; in.sin_family = AF_INET;
memcpy(&in.sin_addr, src, sizeof(struct in_addr)); memcpy(&in.sin_addr, src, sizeof(struct in_addr));
if (0 == getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST)) if (0 == getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST))
return dst; return dst;
} }
else if (af == AF_INET6) else if (af == AF_INET6)
{ {
struct sockaddr_in6 in6; struct sockaddr_in6 in6;
memset(&in6, 0, sizeof(in6)); memset(&in6, 0, sizeof(in6));
in6.sin6_family = AF_INET6; in6.sin6_family = AF_INET6;
memcpy(&in6.sin6_addr, src, sizeof(struct in_addr6)); memcpy(&in6.sin6_addr, src, sizeof(struct in_addr6));
if (0 == getnameinfo((struct sockaddr *)&in6, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST)) if (0 == getnameinfo((struct sockaddr *)&in6, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST))
return dst; return dst;
} }
return NULL; return NULL;
} }
int inet_pton(int af, const char *src, void *dst) int inet_pton(int af, const char *src, void *dst)
{ {
struct addrinfo hints; struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo)); memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = af; hints.ai_family = af;
struct addrinfo* result = NULL; struct addrinfo* result = NULL;
if (0 != getaddrinfo(src, NULL, &hints, &result)) if (0 != getaddrinfo(src, NULL, &hints, &result))
return -1; return -1;
if (result) { if (result) {
if (result->ai_family == AF_INET) { if (result->ai_family == AF_INET) {
struct sockaddr_in* in = (struct sockaddr_in*)result->ai_addr; struct sockaddr_in* in = (struct sockaddr_in*)result->ai_addr;
memcpy(dst, &in->sin_addr, 4); memcpy(dst, &in->sin_addr, 4);
} }
else if (result->ai_family == AF_INET6) { else if (result->ai_family == AF_INET6) {
struct sockaddr_in6* in6 = (struct sockaddr_in6*)result->ai_addr; struct sockaddr_in6* in6 = (struct sockaddr_in6*)result->ai_addr;
memcpy(dst, &in6->sin6_addr, 16); memcpy(dst, &in6->sin6_addr, 16);
} }
else { else {
freeaddrinfo(result); freeaddrinfo(result);
return -1; return -1;
} }
freeaddrinfo(result); freeaddrinfo(result);
return 1; return 1;
} }
return -1; return -1;
} }
#endif /* OS_WIN32 */ #endif /* OS_WIN32 */

@ -44,14 +44,14 @@ int main(int argc, char **argv);
*/ */
int SCRunningAsService(void) int SCRunningAsService(void)
{ {
HANDLE h = INVALID_HANDLE_VALUE; HANDLE h = INVALID_HANDLE_VALUE;
if ((h = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) { if ((h = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) {
SCLogInfo("Running as service: yes"); SCLogInfo("Running as service: yes");
return 1; return 1;
} }
CloseHandle(h); CloseHandle(h);
SCLogInfo("Running as service: no"); SCLogInfo("Running as service: no");
return 0; return 0;
} }
/** /**
@ -59,24 +59,24 @@ int SCRunningAsService(void)
*/ */
void SCAtExitHandler(void) void SCAtExitHandler(void)
{ {
SERVICE_STATUS status = { SERVICE_STATUS status = {
SERVICE_WIN32, SERVICE_WIN32,
SERVICE_STOPPED, SERVICE_STOPPED,
SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
NO_ERROR, NO_ERROR,
NO_ERROR, NO_ERROR,
0, 0,
0 0
}; };
SCLogInfo("Exit handler called."); SCLogInfo("Exit handler called.");
/* mark service as stopped */ /* mark service as stopped */
if (!SetServiceStatus(service_status_handle, &status)) { if (!SetServiceStatus(service_status_handle, &status)) {
SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError()); SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
} else { } else {
SCLogInfo("Service status set to: SERVICE_STOPPED"); SCLogInfo("Service status set to: SERVICE_STOPPED");
} }
} }
/** /**
@ -84,34 +84,34 @@ void SCAtExitHandler(void)
*/ */
static DWORD WINAPI SCServiceCtrlHandlerEx(DWORD code, DWORD etype, LPVOID edata, LPVOID context) static DWORD WINAPI SCServiceCtrlHandlerEx(DWORD code, DWORD etype, LPVOID edata, LPVOID context)
{ {
if (code == SERVICE_CONTROL_SHUTDOWN || code == SERVICE_CONTROL_STOP) { if (code == SERVICE_CONTROL_SHUTDOWN || code == SERVICE_CONTROL_STOP) {
SERVICE_STATUS status = { SERVICE_STATUS status = {
SERVICE_WIN32, SERVICE_WIN32,
SERVICE_STOP_PENDING, SERVICE_STOP_PENDING,
SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
NO_ERROR, NO_ERROR,
NO_ERROR, NO_ERROR,
0, 0,
0 0
}; };
SCLogInfo("Service control handler called with %s control code.", SCLogInfo("Service control handler called with %s control code.",
((code == SERVICE_CONTROL_SHUTDOWN) ? ("SERVICE_CONTROL_SHUTDOWN") : ("SERVICE_CONTROL_STOP"))); ((code == SERVICE_CONTROL_SHUTDOWN) ? ("SERVICE_CONTROL_SHUTDOWN") : ("SERVICE_CONTROL_STOP")));
/* mark service as stop pending */ /* mark service as stop pending */
if (!SetServiceStatus(service_status_handle, &status)) { if (!SetServiceStatus(service_status_handle, &status)) {
SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError()); SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
} else { } else {
SCLogInfo("Service status set to: SERVICE_STOP_PENDING"); SCLogInfo("Service status set to: SERVICE_STOP_PENDING");
} }
/* mark engine as stopping */ /* mark engine as stopping */
EngineStop(); EngineStop();
return NO_ERROR; return NO_ERROR;
} }
return ERROR_CALL_NOT_IMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;
} }
/** /**
@ -119,48 +119,48 @@ static DWORD WINAPI SCServiceCtrlHandlerEx(DWORD code, DWORD etype, LPVOID edata
*/ */
static void WINAPI SCServiceMain(uint32_t argc, char** argv) static void WINAPI SCServiceMain(uint32_t argc, char** argv)
{ {
SERVICE_STATUS status = { SERVICE_STATUS status = {
SERVICE_WIN32, SERVICE_WIN32,
SERVICE_RUNNING, SERVICE_RUNNING,
SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
NO_ERROR, NO_ERROR,
NO_ERROR, NO_ERROR,
0, 0,
0 0
}; };
if ((service_status_handle = RegisterServiceCtrlHandlerEx(PROG_NAME, SCServiceCtrlHandlerEx, NULL)) == (SERVICE_STATUS_HANDLE)0) { if ((service_status_handle = RegisterServiceCtrlHandlerEx(PROG_NAME, SCServiceCtrlHandlerEx, NULL)) == (SERVICE_STATUS_HANDLE)0) {
SCLogError(SC_ERR_SVC, "Can't register service control handler: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't register service control handler: %d", (int)GetLastError());
return; return;
} }
/* register exit handler */ /* register exit handler */
if (atexit(SCAtExitHandler)) { if (atexit(SCAtExitHandler)) {
SCLogWarning(SC_ERR_SVC, "Can't register exit handler: %d", (int)GetLastError()); SCLogWarning(SC_ERR_SVC, "Can't register exit handler: %d", (int)GetLastError());
} }
/* mark service as running immediately */ /* mark service as running immediately */
if (!SetServiceStatus(service_status_handle, &status)) { if (!SetServiceStatus(service_status_handle, &status)) {
SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError()); SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
} else { } else {
SCLogInfo("Service status set to: SERVICE_RUNNING"); SCLogInfo("Service status set to: SERVICE_RUNNING");
} }
SCLogInfo("Entering main function..."); SCLogInfo("Entering main function...");
/* suricata initialization -> main loop -> uninitialization */ /* suricata initialization -> main loop -> uninitialization */
main(service_argc, service_argv); main(service_argc, service_argv);
SCLogInfo("Leaving main function."); SCLogInfo("Leaving main function.");
/* mark service as stopped */ /* mark service as stopped */
status.dwCurrentState = SERVICE_STOPPED; status.dwCurrentState = SERVICE_STOPPED;
if (!SetServiceStatus(service_status_handle, &status)) { if (!SetServiceStatus(service_status_handle, &status)) {
SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError()); SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
} else { } else {
SCLogInfo("Service status set to: SERVICE_STOPPED"); SCLogInfo("Service status set to: SERVICE_STOPPED");
} }
} }
/** /**
@ -171,34 +171,34 @@ static void WINAPI SCServiceMain(uint32_t argc, char** argv)
*/ */
int SCServiceInit(int argc, char **argv) int SCServiceInit(int argc, char **argv)
{ {
SERVICE_TABLE_ENTRY DispatchTable[] = { SERVICE_TABLE_ENTRY DispatchTable[] = {
{PROG_NAME, (LPSERVICE_MAIN_FUNCTION) SCServiceMain}, {PROG_NAME, (LPSERVICE_MAIN_FUNCTION) SCServiceMain},
{NULL, NULL} {NULL, NULL}
}; };
/* continue with suricata initialization */ /* continue with suricata initialization */
if (service_initialized) { if (service_initialized) {
SCLogWarning(SC_ERR_SVC, "Service is already initialized."); SCLogWarning(SC_ERR_SVC, "Service is already initialized.");
return 0; return 0;
} }
/* save args */ /* save args */
service_argc = argc; service_argc = argc;
service_argv = argv; service_argv = argv;
service_initialized = 1; service_initialized = 1;
SCLogInfo("Entering service control dispatcher..."); SCLogInfo("Entering service control dispatcher...");
if (!StartServiceCtrlDispatcher(DispatchTable)) { if (!StartServiceCtrlDispatcher(DispatchTable)) {
/* exit with failure */ /* exit with failure */
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
SCLogInfo("Leaving service control dispatcher."); SCLogInfo("Leaving service control dispatcher.");
/* exit with success */ /* exit with success */
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
/** /**
@ -209,67 +209,67 @@ int SCServiceInit(int argc, char **argv)
*/ */
int SCServiceInstall(int argc, char **argv) int SCServiceInstall(int argc, char **argv)
{ {
char path[2048]; char path[2048];
SC_HANDLE service = NULL; SC_HANDLE service = NULL;
SC_HANDLE scm = NULL; SC_HANDLE scm = NULL;
int ret = -1; int ret = -1;
int i = 0; int i = 0;
do { do {
memset(path, 0, sizeof(path)); memset(path, 0, sizeof(path));
if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){ if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
break; break;
} }
/* skip name of binary itself */ /* skip name of binary itself */
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
if ((strlen(argv[i]) <= strlen("--service-install")) && (strncmp("--service-install", argv[i], strlen(argv[i])) == 0)) { if ((strlen(argv[i]) <= strlen("--service-install")) && (strncmp("--service-install", argv[i], strlen(argv[i])) == 0)) {
continue; continue;
} }
strlcat(path, " ", sizeof(path) - strlen(path) - 1); strlcat(path, " ", sizeof(path) - strlen(path) - 1);
strlcat(path, argv[i], sizeof(path) - strlen(path) - 1); strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
} }
if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
break; break;
} }
service = CreateService( service = CreateService(
scm, scm,
PROG_NAME, PROG_NAME,
PROG_NAME, PROG_NAME,
SERVICE_ALL_ACCESS, SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL, SERVICE_ERROR_NORMAL,
path, path,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL); NULL);
if (service == NULL) { if (service == NULL) {
SCLogError(SC_ERR_SVC, "Can't create service: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't create service: %d", (int)GetLastError());
break; break;
} }
ret = 0; ret = 0;
} while(0); } while(0);
if (service) { if (service) {
CloseServiceHandle(service); CloseServiceHandle(service);
} }
if (scm) { if (scm) {
CloseServiceHandle(scm); CloseServiceHandle(scm);
} }
return ret; return ret;
} }
/** /**
@ -280,50 +280,50 @@ int SCServiceInstall(int argc, char **argv)
*/ */
int SCServiceRemove(int argc, char **argv) int SCServiceRemove(int argc, char **argv)
{ {
SERVICE_STATUS status; SERVICE_STATUS status;
SC_HANDLE service = NULL; SC_HANDLE service = NULL;
SC_HANDLE scm = NULL; SC_HANDLE scm = NULL;
int ret = -1; int ret = -1;
do { do {
if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
break; break;
} }
if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) { if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
break; break;
} }
if (!QueryServiceStatus(service, &status)) { if (!QueryServiceStatus(service, &status)) {
SCLogError(SC_ERR_SVC, "Can't query service status: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't query service status: %d", (int)GetLastError());
break; break;
} }
if (status.dwCurrentState != SERVICE_STOPPED) { if (status.dwCurrentState != SERVICE_STOPPED) {
SCLogError(SC_ERR_SVC, "Service isn't in stopped state: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Service isn't in stopped state: %d", (int)GetLastError());
break; break;
} }
if (!DeleteService(service)) { if (!DeleteService(service)) {
SCLogError(SC_ERR_SVC, "Can't delete service: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't delete service: %d", (int)GetLastError());
break; break;
} }
ret = 0; ret = 0;
} while(0); } while(0);
if (service) { if (service) {
CloseServiceHandle(service); CloseServiceHandle(service);
} }
if (scm) { if (scm) {
CloseServiceHandle(scm); CloseServiceHandle(scm);
} }
return ret; return ret;
} }
/** /**
@ -334,61 +334,61 @@ int SCServiceRemove(int argc, char **argv)
*/ */
int SCServiceChangeParams(int argc, char **argv) int SCServiceChangeParams(int argc, char **argv)
{ {
char path[2048]; char path[2048];
SC_HANDLE service = NULL; SC_HANDLE service = NULL;
SC_HANDLE scm = NULL; SC_HANDLE scm = NULL;
int ret = -1; int ret = -1;
int i = 0; int i = 0;
do { do {
memset(path, 0, sizeof(path)); memset(path, 0, sizeof(path));
if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){ if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
break; break;
} }
/* skip name of binary itself */ /* skip name of binary itself */
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
if ((strlen(argv[i]) <= strlen("--service-change-params")) && (strncmp("--service-change-params", argv[i], strlen(argv[i])) == 0)) { if ((strlen(argv[i]) <= strlen("--service-change-params")) && (strncmp("--service-change-params", argv[i], strlen(argv[i])) == 0)) {
continue; continue;
} }
strlcat(path, " ", sizeof(path) - strlen(path) - 1); strlcat(path, " ", sizeof(path) - strlen(path) - 1);
strlcat(path, argv[i], sizeof(path) - strlen(path) - 1); strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
} }
if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
break; break;
} }
if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) { if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
break; break;
} }
if (!ChangeServiceConfig( if (!ChangeServiceConfig(
service, service,
SERVICE_WIN32_OWN_PROCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL, SERVICE_ERROR_NORMAL,
path, path,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
PROG_NAME)) PROG_NAME))
{ {
SCLogError(SC_ERR_SVC, "Can't change service configuration: %d", (int)GetLastError()); SCLogError(SC_ERR_SVC, "Can't change service configuration: %d", (int)GetLastError());
break; break;
} }
ret = 0; ret = 0;
} while(0); } while(0);
return ret; return ret;
} }
#endif /* OS_WIN32 */ #endif /* OS_WIN32 */

Loading…
Cancel
Save