int verify_shell_cmd ( parameters* in, parameters* out );
int convert_shell_cmd ( parameters* in, parameters* out );
int verify_peer_ip ( parameters* in, parameters* out );
+int verify_peer_ipv6 ( parameters* in, parameters* out );
int verify_sdbd_launch ( parameters* in, parameters* out );
int verify_root_cmd ( parameters* in, parameters* out );
int get_lock_state ( parameters* in, parameters* out );
int get_shell_env ( parameters* in, parameters* out );
int verify_push ( parameters* in, parameters* out );
int verify_pull ( parameters* in, parameters* out );
+int verify_handle_by_plugin ( parameters* in, parameters* out );
int auth_support ( parameters* in, parameters* out );
int auth_get_key_file_paths ( parameters* in, parameters* out );
#include "log.h"
#include "parameter.h"
#include "sdbd_plugin.h"
+#include "transport.h"
#define SHELLCMD_RESULT_BUFSIZE (4096)
// return 0 if disallowed by plugin (invalid)
int request_validity_to_plugin ( int cmd, const char* in_buf );
+// return 1 if allowed by plugin (valid)
+// return 0 if disallowed by plugin (invalid)
+int request_extcmd_validity_to_plugin ( int cmd, const char* in_buf);
+
// return 1 if succeed to convert
// return 0 otherwise
int request_conversion_to_plugin ( int cmd, const char* in_buf, char* out_buf, unsigned int out_len );
+// return 1 if succeed to convert
+// return 0 otherwise
+int request_extcmd_conversion_to_plugin ( int cmd, const char* in_buf, char* out_buf, unsigned int out_len );
+
// return 1 if locked
// return 0 if unlocked
// return -1 if request failed
int request_lock_state_to_plugin ( int lock_type );
+// return 1 if shell command handled by plugin (handle)
+// return 0 if shell command not handled by plugin (not handle)
+int request_handlecmd_to_plugin ( int cmd, const char* in_buf );
+
+// return nonnegative integer that is a socket descriptor for communication
+// with async proc thread if success to create async proc thread
+// return -1 if failed to create async proc thread
+int request_shellcmd_to_plugin ( const char* in_buf );
+
// return nonnegative integer that is a socket descriptor for communication
// with async proc thread if success to create async proc thread
// return -1 if failed to create async proc thread
if (end != NULL) {
strncpy(value, start, end - start);
} else {
- strncpy(value, start, sizeof(value));
+ strncpy(value, start, sizeof(value) - 1);
+ value[sizeof(value) - 1] = '\0';
}
} else {
sdb_close(fd);
enc_p->msg.arg1 = p->msg.arg1;
if(t->encryption == ENCR_ON){ // 암호화 모드가 on인 경우
enc_p->msg.data_length = 13;
- strncpy((char*)enc_p->data, "encryption:on", enc_p->msg.data_length); // encryption:on 메시지 전송
+ strncpy((char*)enc_p->data, "encryption:on", enc_p->msg.data_length + 1); // encryption:on 메시지 전송
} else if(t->encryption == ENCR_OFF){ // 암호화 모드가 off인 경우
enc_p->msg.data_length = 14;
- strncpy((char*)enc_p->data, "encryption:off", enc_p->msg.data_length); // encryption:off 메시지 전송
+ strncpy((char*)enc_p->data, "encryption:off", enc_p->msg.data_length + 1); // encryption:off 메시지 전송
}
send_packet(enc_p, t);
}
if (extcmd != NULL) {
char extbuf[BUF_SIZE] = {0,};
snprintf(extbuf, sizeof extbuf, "::%s", extcmd);
- strncat((char*) cp->data, extbuf, sizeof(cp->data) - strlen(cp->data)- 1);
+ strncat((char*) cp->data, extbuf, sizeof(cp->data) - strlen((const char*)cp->data)- 1);
}
cp->msg.data_length = strlen((char*) cp->data) + 1;
D("CNXN data: %s\n", (char*)cp->data);
return 0;
}
+#if 0
static int safe_system(char *cmd, char *argv[], char *envp[]) {
pid_t pid;
int status;
}
return 0;
}
+#endif
static void init_sdk_requirements() {
// set env variable for temporary
void *cookie;
};
+extern int create_async_extcmd_proc_thread( int cmd, parameters* in );
+
void *service_bootstrap_func(void *x)
{
stinfo *sti = x;
{
int ret_fd;
- ret_fd = create_sync_subprocess(file_sync_service, cmd);
+ ret_fd = create_sync_subprocess(file_sync_service, (void*)cmd);
// FIXME: file missing bug when root on mode
/*
if (should_drop_privileges()) {
full_cmd[ENV_BUF_MAX - 1] = '\0';
}
else {
- strncat(full_cmd, cmd_name, strlen(cmd_name));
+ strncat(full_cmd, cmd_name, ENV_BUF_MAX - 1);
}
int i = 1;
break;
}
strncat(full_cmd, " ",1);
- strncat(full_cmd, tokens[i], strlen(tokens[i]));
+ strncat(full_cmd, tokens[i], ENV_BUF_MAX - 1);
}
D("full extcmd: %s\n", full_cmd);
if (!strcmp(exec_type, "sync")) {
}
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_LOCAL;
- strncpy(addr.sun_path, sockpath, strlen(sockpath)+1);
+ int len = sizeof(addr.sun_path) - 1;
+ strncpy(addr.sun_path, sockpath, len);
+ addr.sun_path[len] = '\0';
int slen = offsetof(struct sockaddr_un, sun_path) + strlen(sockpath);
if (bind(sock, (struct sockaddr *)&addr, slen) == -1) {
fprintf(stderr, "sdbu socket bind error, %d\n", errno);