|
|
| version 1.1.1.2, 2014/06/15 20:20:06 | version 1.1.1.2.2.1, 2014/06/15 20:22:25 |
|---|---|
| Line 11 | Line 11 |
| #include <errno.h> | #include <errno.h> |
| #include <fcntl.h> | #include <fcntl.h> |
| #include <unistd.h> | #include <unistd.h> |
| #include <mysql/mysql.h> | |
| handler_t auth_ldap_init(server *srv, mod_auth_plugin_config *s); | handler_t auth_ldap_init(server *srv, mod_auth_plugin_config *s); |
| Line 83 FREE_FUNC(mod_auth_free) { | Line 84 FREE_FUNC(mod_auth_free) { |
| if (s->ldap) ldap_unbind_s(s->ldap); | if (s->ldap) ldap_unbind_s(s->ldap); |
| #endif | #endif |
| buffer_free(s->auth_mysql_host); | |
| buffer_free(s->auth_mysql_user); | |
| buffer_free(s->auth_mysql_pass); | |
| buffer_free(s->auth_mysql_db); | |
| buffer_free(s->auth_mysql_socket); | |
| buffer_free(s->auth_mysql_users_table); | |
| buffer_free(s->auth_mysql_col_user); | |
| buffer_free(s->auth_mysql_col_pass); | |
| buffer_free(s->auth_mysql_col_realm); | |
| buffer_free(s->auth_mysql_domains_table); | |
| buffer_free(s->auth_mysql_col_domain); | |
| buffer_free(s->auth_mysql_domains_table_col_domain_id); | |
| buffer_free(s->auth_mysql_users_table_col_domain_id); | |
| free(s); | free(s); |
| } | } |
| free(p->config_storage); | free(p->config_storage); |
| Line 120 static int mod_auth_patch_connection(server *srv, conn | Line 135 static int mod_auth_patch_connection(server *srv, conn |
| PATCH(ldap_filter_post); | PATCH(ldap_filter_post); |
| #endif | #endif |
| PATCH(auth_mysql_host); | |
| PATCH(auth_mysql_user); | |
| PATCH(auth_mysql_pass); | |
| PATCH(auth_mysql_db); | |
| PATCH(auth_mysql_port); | |
| PATCH(auth_mysql_socket); | |
| PATCH(auth_mysql_users_table); | |
| PATCH(auth_mysql_col_user); | |
| PATCH(auth_mysql_col_pass); | |
| PATCH(auth_mysql_col_realm); | |
| PATCH(auth_mysql_domains_table); | |
| PATCH(auth_mysql_col_domain); | |
| PATCH(auth_mysql_domains_table_col_domain_id); | |
| PATCH(auth_mysql_users_table_col_domain_id); | |
| /* skip the first, the global context */ | /* skip the first, the global context */ |
| for (i = 1; i < srv->config_context->used; i++) { | for (i = 1; i < srv->config_context->used; i++) { |
| data_config *dc = (data_config *)srv->config_context->data[i]; | data_config *dc = (data_config *)srv->config_context->data[i]; |
| Line 169 static int mod_auth_patch_connection(server *srv, conn | Line 199 static int mod_auth_patch_connection(server *srv, conn |
| PATCH(auth_ldap_bindpw); | PATCH(auth_ldap_bindpw); |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.allow-empty-pw"))) { | } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.allow-empty-pw"))) { |
| PATCH(auth_ldap_allow_empty_pw); | PATCH(auth_ldap_allow_empty_pw); |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.host"))) { | |
| PATCH(auth_mysql_host); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.user"))) { | |
| PATCH(auth_mysql_user); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.pass"))) { | |
| PATCH(auth_mysql_pass); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.db"))) { | |
| PATCH(auth_mysql_db); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.port"))) { | |
| PATCH(auth_mysql_port); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.socket"))) { | |
| PATCH(auth_mysql_user); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.users_table"))) { | |
| PATCH(auth_mysql_users_table); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.col_user"))) { | |
| PATCH(auth_mysql_col_user); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.col_pass"))) { | |
| PATCH(auth_mysql_col_pass); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.col_realm"))) { | |
| PATCH(auth_mysql_col_realm); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.domains_table"))) { | |
| PATCH(auth_mysql_domains_table); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.col_domain"))) { | |
| PATCH(auth_mysql_col_domain); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.domains_table_col_domain_id"))) { | |
| PATCH(auth_mysql_domains_table_col_domain_id); | |
| } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.mysql.users_table_col_domain_id"))) { | |
| PATCH(auth_mysql_users_table_col_domain_id); | |
| } | } |
| } | } |
| } | } |
| Line 357 SETDEFAULTS_FUNC(mod_auth_set_defaults) { | Line 415 SETDEFAULTS_FUNC(mod_auth_set_defaults) { |
| { "auth.backend.ldap.starttls", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 8 */ | { "auth.backend.ldap.starttls", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 8 */ |
| { "auth.backend.ldap.bind-dn", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 9 */ | { "auth.backend.ldap.bind-dn", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 9 */ |
| { "auth.backend.ldap.bind-pw", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ | { "auth.backend.ldap.bind-pw", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ |
| { "auth.backend.ldap.allow-empty-pw", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 11 */ | { "auth.backend.ldap.allow-empty-pw", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, |
| { "auth.backend.htdigest.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 12 */ | { "auth.backend.htdigest.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 12 */ |
| { "auth.backend.htpasswd.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 13 */ | { "auth.backend.htpasswd.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 13 */ |
| { "auth.debug", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 14 */ | { "auth.debug", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 14 */ |
| { "auth.backend.mysql.host", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.user", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.pass", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.db", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.port", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.socket", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.users_table", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.col_user", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.col_pass", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.col_realm", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 23 */ | |
| { "auth.backend.mysql.domains_table", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.col_domain", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.domains_table_col_domain_id", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, | |
| { "auth.backend.mysql.users_table_col_domain_id", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 27 */ | |
| { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } | { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } |
| }; | }; |
| Line 389 SETDEFAULTS_FUNC(mod_auth_set_defaults) { | Line 461 SETDEFAULTS_FUNC(mod_auth_set_defaults) { |
| s->auth_debug = 0; | s->auth_debug = 0; |
| s->auth_require = array_init(); | s->auth_require = array_init(); |
| s->mysql_conn = NULL; | |
| s->auth_mysql_host = buffer_init(); | |
| s->auth_mysql_user = buffer_init(); | |
| s->auth_mysql_pass = buffer_init(); | |
| s->auth_mysql_db = buffer_init(); | |
| s->auth_mysql_port = buffer_init(); | |
| s->auth_mysql_socket = buffer_init(); | |
| s->auth_mysql_users_table = buffer_init(); | |
| s->auth_mysql_col_user = buffer_init(); | |
| s->auth_mysql_col_pass = buffer_init(); | |
| s->auth_mysql_col_realm = buffer_init(); | |
| s->auth_mysql_domains_table = buffer_init(); | |
| s->auth_mysql_col_domain = buffer_init(); | |
| s->auth_mysql_domains_table_col_domain_id = buffer_init(); | |
| s->auth_mysql_users_table_col_domain_id = buffer_init(); | |
| #ifdef USE_LDAP | #ifdef USE_LDAP |
| s->ldap_filter_pre = buffer_init(); | s->ldap_filter_pre = buffer_init(); |
| s->ldap_filter_post = buffer_init(); | s->ldap_filter_post = buffer_init(); |
| Line 411 SETDEFAULTS_FUNC(mod_auth_set_defaults) { | Line 499 SETDEFAULTS_FUNC(mod_auth_set_defaults) { |
| cv[12].destination = s->auth_htdigest_userfile; | cv[12].destination = s->auth_htdigest_userfile; |
| cv[13].destination = s->auth_htpasswd_userfile; | cv[13].destination = s->auth_htpasswd_userfile; |
| cv[14].destination = &(s->auth_debug); | cv[14].destination = &(s->auth_debug); |
| cv[15].destination = s->auth_mysql_host; | |
| cv[16].destination = s->auth_mysql_user; | |
| cv[17].destination = s->auth_mysql_pass; | |
| cv[18].destination = s->auth_mysql_db; | |
| cv[19].destination = s->auth_mysql_port; | |
| cv[20].destination = s->auth_mysql_socket; | |
| cv[21].destination = s->auth_mysql_users_table; | |
| cv[22].destination = s->auth_mysql_col_user; | |
| cv[23].destination = s->auth_mysql_col_pass; | |
| cv[24].destination = s->auth_mysql_col_realm; | |
| cv[25].destination = s->auth_mysql_domains_table; | |
| cv[26].destination = s->auth_mysql_col_domain; | |
| cv[27].destination = s->auth_mysql_domains_table_col_domain_id; | |
| cv[28].destination = s->auth_mysql_users_table_col_domain_id; | |
| p->config_storage[i] = s; | p->config_storage[i] = s; |
| ca = ((data_config *)srv->config_context->data[i])->value; | ca = ((data_config *)srv->config_context->data[i])->value; |
| Line 428 SETDEFAULTS_FUNC(mod_auth_set_defaults) { | Line 529 SETDEFAULTS_FUNC(mod_auth_set_defaults) { |
| s->auth_backend = AUTH_BACKEND_PLAIN; | s->auth_backend = AUTH_BACKEND_PLAIN; |
| } else if (0 == strcmp(s->auth_backend_conf->ptr, "ldap")) { | } else if (0 == strcmp(s->auth_backend_conf->ptr, "ldap")) { |
| s->auth_backend = AUTH_BACKEND_LDAP; | s->auth_backend = AUTH_BACKEND_LDAP; |
| } else if (0 == strcmp(s->auth_backend_conf->ptr, "mysql")) { | |
| s->auth_backend = AUTH_BACKEND_MYSQL; | |
| } else { | } else { |
| log_error_write(srv, __FILE__, __LINE__, "sb", "auth.backend not supported:", s->auth_backend_conf); | log_error_write(srv, __FILE__, __LINE__, "sb", "auth.backend not supported:", s->auth_backend_conf); |
| Line 569 SETDEFAULTS_FUNC(mod_auth_set_defaults) { | Line 672 SETDEFAULTS_FUNC(mod_auth_set_defaults) { |
| return (ret); | return (ret); |
| break; | break; |
| } | } |
| case AUTH_BACKEND_MYSQL: { | |
| int port = atoi(s->auth_mysql_port->ptr); | |
| if (p->conf.auth_mysql_socket->ptr != NULL) | |
| if (0 == strcmp(s->auth_mysql_socket->ptr, "")) s->auth_mysql_socket->ptr = NULL; | |
| s->mysql_conn = mysql_init(NULL); | |
| if (!mysql_real_connect(s->mysql_conn, s->auth_mysql_host->ptr, s->auth_mysql_user->ptr, s->auth_mysql_pass->ptr, s->auth_mysql_db->ptr, port, NULL, 0)) | |
| { | |
| log_error_write(srv, __FILE__, __LINE__, "sbsbsbsbss", | |
| "opening connection to mysql:", s->auth_mysql_host, | |
| "user:", s->auth_mysql_user, | |
| "pass:", s->auth_mysql_pass, | |
| "db:", s->auth_mysql_db, | |
| "failed:", strerror(errno)); | |
| return HANDLER_ERROR; | |
| } | |
| mysql_close(s->mysql_conn); | |
| break; | |
| } | |
| default: | default: |
| break; | break; |
| } | } |