```
Usage: ./ympd [OPTION]...
+ -d, --digest <htdigest> path to htdigest file for authorization
+ (realm ympd) [no authorization]
-h, --host <host> connect to mpd at host [localhost]
-p, --port <port> connect to mpd at port [6600]
-w, --webport [ip:]<port> listen interface/port for webserver [8080]
force_exit = 1;
}
+char *gpass = NULL;
+
static int server_callback(struct mg_connection *c, enum mg_event ev) {
+ int result = MG_FALSE;
+ FILE *fp = NULL;
+
switch(ev) {
case MG_CLOSE:
mpd_close_handler(c);
return callback_http(c);
#endif
case MG_AUTH:
- return MG_TRUE;
+ if ( gpass == NULL )
+ return MG_TRUE;
+ else {
+ if ( (fp = fopen(gpass, "r")) != NULL ) {
+ result = mg_authorize_digest(c, fp);
+ fclose(fp);
+ }
+ }
+ return result;
default:
return MG_FALSE;
}
mg_set_option(server, "document_root", SRC_PATH);
#endif
+ mg_set_option(server, "auth_domain", "ympd");
mpd.port = 6600;
strcpy(mpd.host, "127.0.0.1");
static struct option long_options[] = {
+ {"digest", optional_argument, 0, 'd'},
{"host", required_argument, 0, 'h'},
{"port", required_argument, 0, 'p'},
{"webport", required_argument, 0, 'w'},
{0, 0, 0, 0 }
};
- while((n = getopt_long(argc, argv, "h:p:w:u:v",
+ while((n = getopt_long(argc, argv, "d:h:p:w:u:v",
long_options, &option_index)) != -1) {
switch (n) {
+ case 'd':
+ gpass = strdup(optarg);
+ break;
case 'h':
strncpy(mpd.host, optarg, sizeof(mpd.host));
break;
break;
default:
fprintf(stderr, "Usage: %s [OPTION]...\n\n"
+ " -d, --digest <htdigest>\tpath to htdigest file for authorization\n"
+ " \t(realm ympd) [no authorization]\n"
" -h, --host <host>\t\tconnect to mpd at host [localhost]\n"
" -p, --port <port>\t\tconnect to mpd at port [6600]\n"
" -w, --webport [ip:]<port>\tlisten interface/port for webserver [8080]\n"