* limitations under the License.
*
*/
-\r
-\r
-#ifndef __APP_PKT_T_\r
-#define __APP_PKT_T_\r
-\r
-#include <unistd.h>\r
-#define __USE_GNU\r
-#include <sys/socket.h>\r
-#include <linux/un.h>\r
-\r
-enum ac_cmd {\r
- AC_CHECK,\r
- AC_REGISTER,\r
- AC_UNREGISTER,\r
-};\r
-\r
-#define AC_SOCK_NAME "/tmp/ac-socket"\r
-#define AC_SOCK_MAXBUFF 65535\r
-\r
-typedef struct _ac_pkt_t {\r
- int cmd;\r
- int len;\r
- unsigned char data[1];\r
-} ac_pkt_t;\r
-\r
-int _create_server_sock();\r
-int _create_client_sock();\r
-int _app_send_raw(int cmd, unsigned char *data, int datalen);\r
-ac_pkt_t *_app_recv_raw(int fd, int *clifd, struct ucred *cr);\r
-int _send_result_to_server(int fd, int res);\r
-\r
-\r
-#endif\r
-\r
+
+
+#ifndef __APP_PKT_T_
+#define __APP_PKT_T_
+
+#include <unistd.h>
+#define __USE_GNU
+#include <sys/socket.h>
+#include <linux/un.h>
+
+enum ac_cmd {
+ AC_CHECK,
+ AC_REGISTER,
+ AC_UNREGISTER,
+};
+
+#define AC_SOCK_NAME "/tmp/ac-socket"
+#define AC_SOCK_MAXBUFF 131071
+
+typedef struct _ac_pkt_t {
+ int cmd;
+ int len;
+ unsigned char data[1];
+} ac_pkt_t;
+
+int _create_server_sock();
+int _create_client_sock();
+int _app_send_raw(int cmd, unsigned char *data, int datalen);
+ac_pkt_t *_app_recv_raw(int fd, int *clifd, struct ucred *cr);
+int _send_result_to_server(int fd, int res);
+
+
+#endif
ad = (struct ac_data *)g_base64_decode((const gchar*)pkt->data, (gsize *)&size);
if (ad == NULL) {
- _E("out of memory");
- free(pkt);
- close(clifd);
- return FALSE;
+ ret = -1;
+ goto ERROR;
}
SECURE_LOGD("cmd : %d, pkgname : %s, pkgtype : %s", pkt->cmd, ad->pkg_name, ad->pkg_type);
case AC_CHECK:
_send_result_to_server(clifd, AC_R_OK);
ret = __check_launch_privilege(ad->pkg_name, ad->pkg_type, ad->pid);
- g_free(ad);
+ g_free(ad);
free(pkt);
return TRUE;
break;
default:
_E("no support packet");
}
-
+ERROR:
_send_result_to_server(clifd, ret);
- g_free(ad);
- free(pkt);
+ if (ad)
+ g_free(ad);
+
+ if (pkt)
+ free(pkt);
+
return TRUE;
}
_D("app checker server initialize");
fd = _create_server_sock();
+ if (fd == -1) {
+ _E("_create_server_sock failed.");
+ return AC_R_ERROR;
+ }
src = g_source_new(&funcs, sizeof(GSource));
gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD));
- if (gpollfd == NULL) {
- _E("out of memory");
+ if (!gpollfd) {
g_source_unref(src);
close(fd);
return AC_R_ERROR;
}
-
gpollfd->events = POLLIN;
gpollfd->fd = fd;
g_source_unref(src);
DIR *dp;
- struct dirent *dentry;
+ struct dirent dentry;
+ struct dirent *result = NULL;
DIR *sub_dp = NULL;
- struct dirent *sub_dentry;
+ struct dirent sub_dentry;
+ struct dirent *sub_result = NULL;
char buf[MAX_LOCAL_BUFSZ];
char buf2[MAX_LOCAL_BUFSZ];
ac_type_list_t *type_t = NULL;
if (dp == NULL) {
return AC_R_ERROR;
}
- while ((dentry = readdir(dp)) != NULL) {
- if(dentry->d_type != DT_DIR)
+ while (readdir_r(dp, &dentry, &result) == 0 && result != NULL) {
+ if(dentry.d_type != DT_DIR)
continue;
- if(strcmp(dentry->d_name,".") == 0 || strcmp(dentry->d_name,"..") == 0)
+ if(strcmp(dentry.d_name,".") == 0 || strcmp(dentry.d_name,"..") == 0)
continue;
- snprintf(buf,MAX_LOCAL_BUFSZ,"%s/%s",PLUGINS_PREFIX,dentry->d_name);
- SECURE_LOGD("type : %s", dentry->d_name);
+ snprintf(buf,MAX_LOCAL_BUFSZ,"%s/%s", PLUGINS_PREFIX, dentry.d_name);
+ SECURE_LOGD("type : %s", dentry.d_name);
type_t = malloc(sizeof(ac_type_list_t));
if(type_t == NULL) {
return AC_R_ERROR;
}
memset(type_t, 0, sizeof(ac_type_list_t));
- type_t->pkg_type = strdup(dentry->d_name);
+ type_t->pkg_type = strdup(dentry.d_name);
type_t->so_list = NULL;
pkg_type_list = g_slist_append(pkg_type_list, (void *)type_t);
return AC_R_ERROR;
}
- while ((sub_dentry = readdir(sub_dp)) != NULL) {
-
- if(sub_dentry->d_type == DT_DIR)
+ while (readdir_r(sub_dp, &sub_dentry, &sub_result) == 0 && sub_result != NULL) {
+ if(sub_dentry.d_type == DT_DIR)
continue;
- snprintf(buf2,MAX_LOCAL_BUFSZ,"%s/%s", buf, sub_dentry->d_name);
+ snprintf(buf2,MAX_LOCAL_BUFSZ,"%s/%s", buf, sub_dentry.d_name);
SECURE_LOGD("so_name : %s", buf2);
handle = dlopen(buf2, RTLD_LAZY);
return AC_R_ERROR;
}
memset(so_t, 0, sizeof(ac_so_list_t));
- so_t->so_name = strdup(sub_dentry->d_name);
+ so_t->so_name = strdup(sub_dentry.d_name);
so_t->ac_check = dlsym(handle, "check_launch_privilege");
so_t->ac_register = dlsym(handle, "check_register_privilege");
so_t->ac_unregister = dlsym(handle, "check_unregister_privilege");