mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
fix -pw bug in dnssd.c (fixes #426)
This commit is contained in:
@@ -164,7 +164,7 @@ dnssd_init(const char* name, int name_len, const char* hw_addr, int hw_addr_len,
|
||||
unsigned long features;
|
||||
/* pin_pw = 0: no pin or password
|
||||
1: use onscreen pin for client access control
|
||||
2: require password for client accress control.
|
||||
2 or 3: require password for client access control
|
||||
*/
|
||||
|
||||
if (error) *error = DNSSD_ERROR_NOERROR;
|
||||
@@ -308,6 +308,7 @@ dnssd_register_raop(dnssd_t *dnssd, unsigned short port)
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "rhd", strlen(RAOP_RHD), RAOP_RHD);
|
||||
switch (dnssd->pin_pw) {
|
||||
case 2:
|
||||
case 3:
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true");
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 4, "0x84");
|
||||
break;
|
||||
@@ -316,7 +317,7 @@ dnssd_register_raop(dnssd_t *dnssd, unsigned short port)
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 3, "0x8c");
|
||||
break;
|
||||
default:
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "false");
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("false"), "false");
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", strlen(RAOP_SF), RAOP_SF);
|
||||
break;
|
||||
}
|
||||
@@ -384,6 +385,7 @@ dnssd_register_airplay(dnssd_t *dnssd, unsigned short port)
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
||||
break;
|
||||
case 2: // require password
|
||||
case 3:
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
||||
break;
|
||||
|
||||
@@ -588,7 +588,7 @@ raop_handler_setup(raop_conn_t *conn,
|
||||
if (!conn->authenticated && conn->raop->callbacks.passwd) {
|
||||
int len;
|
||||
const char *password = conn->raop->callbacks.passwd(conn->raop->callbacks.cls, &len);
|
||||
// len = -1 means use a random password for this connection
|
||||
// len = -1 means use a random password for this connection; len = 0 means no password
|
||||
if (len == -1 && conn->raop->random_pw && conn->raop->auth_fail_count >= 5) {
|
||||
// change random_pw after 5 failed authentication attempts
|
||||
logger_log(conn->raop->logger, LOGGER_INFO, "Too many authentication failures: generate new random password");
|
||||
|
||||
12
uxplay.cpp
12
uxplay.cpp
@@ -1545,6 +1545,7 @@ static int start_dnssd(std::vector<char> hw_addr, std::string name) {
|
||||
/* pin_pw controls client access
|
||||
pin_pw = 1: client must enter pin displayed onscreen (first access only)
|
||||
= 2: client must enter password (same password for all clients)
|
||||
= 3: client must enter randoe 4-digit password displayed like an onscreen pin (every access)
|
||||
= 0: no access control
|
||||
*/
|
||||
dnssd = dnssd_init(name.c_str(), strlen(name.c_str()), hw_addr.data(), hw_addr.size(), &dnssd_error, pin_pw);
|
||||
@@ -1705,12 +1706,15 @@ extern "C" void display_pin(void *cls, char *pin) {
|
||||
}
|
||||
|
||||
extern "C" const char *passwd(void *cls, int *len){
|
||||
if (pin_pw == 3) {
|
||||
*len = -1;
|
||||
return NULL;
|
||||
}
|
||||
if (pin_pw == 2) {
|
||||
*len = password.size();
|
||||
return password.c_str();
|
||||
} else if (pin_pw == 3) {
|
||||
*len = -1;
|
||||
} else {
|
||||
*len = 0; /* no password used */
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern "C" void export_dacp(void *cls, const char *active_remote, const char *dacp_id) {
|
||||
|
||||
Reference in New Issue
Block a user