-static int
-sasl_checkpass_cb(sasl_conn_t *conn,
- void *context,
- const char *user,
- const char *pass,
- unsigned passlen,
- struct propctx *propctx)
-{
- const void *remoteport = NULL;
- char *clientip = NULL;
- if (sasl_getprop(conn, SASL_IPREMOTEPORT, &remoteport) == SASL_OK) {
- clientip = strtok(g_strdup(remoteport), ";");
- } else {
- clientip = g_strdup("unknown");
- }
-
- int res = pve_auth_verify(clientip, user, pass);
-
- g_free(clientip);
-
- return (res == 0) ? SASL_OK : SASL_NOAUTHZ;
-}
-
-static int
-sasl_getopt_cb(void *context, const char *plugin_name,
- const char *option,
- const char **result, unsigned *len)
-{
- if (strcmp(option, "mech_list") == 0) {
- *result = "plain";
- len = NULL;
- return SASL_OK;
- }
-
- return SASL_FAIL;
-}
-
-typedef int sasl_cb_fn(void);
-static sasl_callback_t sasl_callbacks[] = {
- { SASL_CB_GETOPT, (sasl_cb_fn *)sasl_getopt_cb, NULL },
- { SASL_CB_SERVER_USERDB_CHECKPASS, (sasl_cb_fn *)sasl_checkpass_cb, NULL },
- { SASL_CB_LIST_END, NULL, NULL },
-};
-