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,8 +164,8 @@ dnssd_init(const char* name, int name_len, const char* hw_addr, int hw_addr_len,
|
|||||||
unsigned long features;
|
unsigned long features;
|
||||||
/* pin_pw = 0: no pin or password
|
/* pin_pw = 0: no pin or password
|
||||||
1: use onscreen pin for client access control
|
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;
|
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);
|
dnssd->TXTRecordSetValue(&dnssd->raop_record, "rhd", strlen(RAOP_RHD), RAOP_RHD);
|
||||||
switch (dnssd->pin_pw) {
|
switch (dnssd->pin_pw) {
|
||||||
case 2:
|
case 2:
|
||||||
|
case 3:
|
||||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true");
|
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true");
|
||||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 4, "0x84");
|
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 4, "0x84");
|
||||||
break;
|
break;
|
||||||
@@ -316,7 +317,7 @@ dnssd_register_raop(dnssd_t *dnssd, unsigned short port)
|
|||||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 3, "0x8c");
|
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 3, "0x8c");
|
||||||
break;
|
break;
|
||||||
default:
|
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);
|
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", strlen(RAOP_SF), RAOP_SF);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -384,6 +385,7 @@ dnssd_register_airplay(dnssd_t *dnssd, unsigned short port)
|
|||||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
||||||
break;
|
break;
|
||||||
case 2: // require password
|
case 2: // require password
|
||||||
|
case 3:
|
||||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
|
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
|
||||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -588,7 +588,7 @@ raop_handler_setup(raop_conn_t *conn,
|
|||||||
if (!conn->authenticated && conn->raop->callbacks.passwd) {
|
if (!conn->authenticated && conn->raop->callbacks.passwd) {
|
||||||
int len;
|
int len;
|
||||||
const char *password = conn->raop->callbacks.passwd(conn->raop->callbacks.cls, &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) {
|
if (len == -1 && conn->raop->random_pw && conn->raop->auth_fail_count >= 5) {
|
||||||
// change random_pw after 5 failed authentication attempts
|
// change random_pw after 5 failed authentication attempts
|
||||||
logger_log(conn->raop->logger, LOGGER_INFO, "Too many authentication failures: generate new random password");
|
logger_log(conn->raop->logger, LOGGER_INFO, "Too many authentication failures: generate new random password");
|
||||||
|
|||||||
14
uxplay.cpp
14
uxplay.cpp
@@ -1543,8 +1543,9 @@ static int start_dnssd(std::vector<char> hw_addr, std::string name) {
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
/* pin_pw controls client access
|
/* pin_pw controls client access
|
||||||
pin_pw = 1: client must enter pin displayed onscreen (first access only)
|
pin_pw = 1: client must enter pin displayed onscreen (first access only)
|
||||||
= 2: client must enter password (same password for all clients)
|
= 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
|
= 0: no access control
|
||||||
*/
|
*/
|
||||||
dnssd = dnssd_init(name.c_str(), strlen(name.c_str()), hw_addr.data(), hw_addr.size(), &dnssd_error, pin_pw);
|
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){
|
extern "C" const char *passwd(void *cls, int *len){
|
||||||
if (pin_pw == 3) {
|
if (pin_pw == 2) {
|
||||||
|
*len = password.size();
|
||||||
|
return password.c_str();
|
||||||
|
} else if (pin_pw == 3) {
|
||||||
*len = -1;
|
*len = -1;
|
||||||
return NULL;
|
} else {
|
||||||
|
*len = 0; /* no password used */
|
||||||
}
|
}
|
||||||
*len = password.size();
|
return NULL;
|
||||||
return password.c_str();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void export_dacp(void *cls, const char *active_remote, const char *dacp_id) {
|
extern "C" void export_dacp(void *cls, const char *active_remote, const char *dacp_id) {
|
||||||
|
|||||||
Reference in New Issue
Block a user