log: normalize AFP file-info messages
This commit is contained in:
211
src/nwconn.c
211
src/nwconn.c
@@ -2096,6 +2096,7 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
uint8 volume_number;
|
||||
uint32 request_entry_id;
|
||||
uint16 request_mask;
|
||||
int afp_sub = afp_req[0];
|
||||
int path_len;
|
||||
int volume;
|
||||
char unixname[PATH_MAX];
|
||||
@@ -2107,8 +2108,8 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
int result;
|
||||
|
||||
if (afp_len < 9) {
|
||||
XDPRINTF((2,0, "%s rejected: short request len=%d",
|
||||
call_name, afp_len));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=short_request len=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, afp_sub));
|
||||
return(-0x7e); /* NCP Boundary Check Failed */
|
||||
}
|
||||
|
||||
@@ -2117,13 +2118,14 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
request_mask = GET_BE16(afp_req + 6);
|
||||
path_len = (int)afp_req[8];
|
||||
if (path_len < 0 || afp_len < 9 + path_len) {
|
||||
XDPRINTF((2,0, "%s rejected: boundary check len=%d path_len=%d",
|
||||
call_name, afp_len, path_len));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=boundary_check len=%d path_len=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, path_len, afp_sub));
|
||||
return(-0x7e);
|
||||
}
|
||||
|
||||
if (!nwatalk_backend_available()) {
|
||||
XDPRINTF((3,0, "%s rejected: AFP xattr metadata backend unavailable", call_name));
|
||||
XDPRINTF((3,0, "WARN AFP 35/%d REJECT reason=no_xattr_backend fn=0x23 sub=0x%02x result=0xbf",
|
||||
afp_sub, afp_sub));
|
||||
return(-0xbf); /* invalid namespace */
|
||||
}
|
||||
|
||||
@@ -2133,9 +2135,10 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
unixname, sizeof(unixname),
|
||||
&volume, &path_data_len);
|
||||
if (result) {
|
||||
XDPRINTF((2,0, "%s entry-id lookup failed: vol=%d entry=0x%08x mask=0x%04x result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id,
|
||||
request_mask, -result));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=entry_id_lookup vol=%u entry=%lu mask=0x%04x fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask, afp_sub,
|
||||
request_entry_id, (unsigned int)(-result)));
|
||||
return(result);
|
||||
}
|
||||
path_data = (uint8 *)entry_path;
|
||||
@@ -2145,9 +2148,11 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
volume = conn_get_kpl_unxname(unixname, sizeof(unixname), 0,
|
||||
path_data, path_data_len);
|
||||
if (volume < 0) {
|
||||
XDPRINTF((2,0, "%s path resolve failed: vol=%d entry=0x%08x path='%s' result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id,
|
||||
visable_data(path_data, path_data_len), -volume));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=path_resolve vol=%u entry=%lu path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id,
|
||||
visable_data(path_data, path_data_len), afp_sub,
|
||||
request_entry_id, (unsigned int)(-volume)));
|
||||
return(volume);
|
||||
}
|
||||
}
|
||||
@@ -2156,16 +2161,20 @@ static int afp_get_file_information(uint8 *afp_req, int afp_len,
|
||||
volume, afp_req[0] == 0x0f,
|
||||
response, &entry_id, &fallback);
|
||||
if (result < 0) {
|
||||
XDPRINTF((2,0, "%s stat failed: vol=%d entry=0x%08x path='%s' unix='%s' result=-0x%x errno=%d",
|
||||
call_name, (int)volume_number, request_entry_id,
|
||||
visable_data(path_data, path_data_len), unixname, -result, errno));
|
||||
XDPRINTF((2,0, "WARN FILE 35/%d FAIL reason=stat vol=%u entry=%lu path='%s' unix='%s' errno=%d fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id,
|
||||
visable_data(path_data, path_data_len), unixname, errno,
|
||||
afp_sub, request_entry_id, (unsigned int)(-result)));
|
||||
return(result);
|
||||
}
|
||||
|
||||
XDPRINTF((3,0, "%s: vol=%d entry=0x%08x mask=0x%04x path='%s' reply_entry=0x%08x%s",
|
||||
call_name, (int)volume_number, request_entry_id, request_mask,
|
||||
visable_data(path_data, path_data_len), entry_id,
|
||||
fallback ? " fallback" : ""));
|
||||
XDPRINTF((3,0, "INFO AFP 35/%d DONE vol=%u entry=%lu mask=0x%04x path='%s' reply_entry=%lu mode='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x reply_entry_hex=0x%08x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask,
|
||||
visable_data(path_data, path_data_len),
|
||||
(unsigned long)entry_id, fallback ? "fallback" : "",
|
||||
afp_sub, request_entry_id, entry_id));
|
||||
return(result);
|
||||
}
|
||||
|
||||
@@ -2198,13 +2207,13 @@ static int afp_set_netware_attributes(int volume, char *unixname,
|
||||
|
||||
static int afp_check_metadata_modify_rights(int volume, char *unixname,
|
||||
struct stat *stb,
|
||||
const char *call_name,
|
||||
int afp_sub,
|
||||
uint8 *path, int path_len)
|
||||
{
|
||||
if (!unixname || !stb) return(-0x9c);
|
||||
if (tru_eff_rights_exists(volume, (uint8 *)unixname, stb, TRUSTEE_M)) {
|
||||
XDPRINTF((2,0, "%s rejected: no Modify rights for AFP metadata path='%s'",
|
||||
call_name, visable_data(path, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=no_modify_rights path='%s' fn=0x23 sub=0x%02x result=0x8c",
|
||||
afp_sub, visable_data(path, path_len), afp_sub));
|
||||
return(-0x8c); /* no modify rights */
|
||||
}
|
||||
return(0);
|
||||
@@ -2247,6 +2256,7 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
uint8 volume_number;
|
||||
uint32 request_entry_id;
|
||||
uint16 request_mask;
|
||||
int afp_sub = afp_req[0];
|
||||
int is_afp20;
|
||||
int path_len;
|
||||
int path_off;
|
||||
@@ -2271,8 +2281,8 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
uint8 *prodos_data = NULL;
|
||||
|
||||
if (afp_len < 9) {
|
||||
XDPRINTF((2,0, "%s rejected: short request len=%d",
|
||||
call_name, afp_len));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=short_request len=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, afp_sub));
|
||||
return(-0x7e); /* NCP Boundary Check Failed */
|
||||
}
|
||||
|
||||
@@ -2291,16 +2301,16 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
int websdk_path_off = websdk_path_len_off + 1;
|
||||
|
||||
if (afp_len <= websdk_path_len_off) {
|
||||
XDPRINTF((2,0, "%s rejected: short WebSDK request len=%d path_len_off=%d",
|
||||
call_name, afp_len, websdk_path_len_off));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=short_websdk_request len=%d path_len_off=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, websdk_path_len_off, afp_sub));
|
||||
return(-0x7e);
|
||||
}
|
||||
|
||||
path_len = (int)afp_req[websdk_path_len_off];
|
||||
path_off = websdk_path_off;
|
||||
if (path_len < 0 || afp_len < path_off + path_len) {
|
||||
XDPRINTF((2,0, "%s rejected: WebSDK boundary check len=%d path_len=%d path_off=%d",
|
||||
call_name, afp_len, path_len, path_off));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=websdk_boundary_check len=%d path_len=%d path_off=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, path_len, path_off, afp_sub));
|
||||
return(-0x7e);
|
||||
}
|
||||
|
||||
@@ -2316,7 +2326,8 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
path_data = afp_req + path_off;
|
||||
|
||||
if (!nwatalk_backend_available()) {
|
||||
XDPRINTF((3,0, "%s rejected: AFP xattr metadata backend unavailable", call_name));
|
||||
XDPRINTF((3,0, "WARN AFP 35/%d REJECT reason=no_xattr_backend fn=0x23 sub=0x%02x result=0xbf",
|
||||
afp_sub, afp_sub));
|
||||
return(-0xbf); /* invalid namespace */
|
||||
}
|
||||
|
||||
@@ -2326,9 +2337,10 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
unixname, sizeof(unixname),
|
||||
&path_volume, &entry_path_len);
|
||||
if (result) {
|
||||
XDPRINTF((2,0, "%s entry-id lookup failed: vol=%d entry=0x%08x mask=0x%04x result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id,
|
||||
request_mask, -result));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=entry_id_lookup vol=%u entry=%lu mask=0x%04x fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask, afp_sub,
|
||||
request_entry_id, (unsigned int)(-result)));
|
||||
return(result);
|
||||
}
|
||||
path_data = (uint8 *)entry_path;
|
||||
@@ -2340,15 +2352,17 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
AFP_FILE_BITMAP_CREATE_DATE | AFP_FILE_BITMAP_MODIFY_DATE |
|
||||
AFP_FILE_BITMAP_BACKUP_DATE |
|
||||
AFP_FILE_BITMAP_FINDER_INFO)) {
|
||||
XDPRINTF((2,0, "%s rejected: unsupported bitmap vol=%d entry=0x%08x mask=0x%04x path='%s'",
|
||||
call_name, (int)volume_number, request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=unsupported_bitmap vol=%u entry=%lu mask=0x%04x path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len), afp_sub, request_entry_id));
|
||||
return(-0x9c); /* keep unsupported write semantics conservative */
|
||||
}
|
||||
if (!request_mask) {
|
||||
XDPRINTF((2,0, "%s rejected: empty bitmap vol=%d entry=0x%08x path='%s'",
|
||||
call_name, (int)volume_number, request_entry_id,
|
||||
visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=empty_bitmap vol=%u entry=%lu path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id,
|
||||
visable_data(path_data, path_len), afp_sub, request_entry_id));
|
||||
return(-0x9c);
|
||||
}
|
||||
|
||||
@@ -2356,8 +2370,9 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
uint16 requested_attrs = GET_BE16(attribute_data);
|
||||
uint16 requested_bits = requested_attrs & ~AFP_ATTR_SETCLR;
|
||||
if (requested_bits & ~AFP_ATTR_NETWARE_MASK) {
|
||||
XDPRINTF((2,0, "%s rejected: unsupported AFP attributes attrs=0x%04x path='%s'",
|
||||
call_name, requested_attrs, visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=unsupported_attributes attrs=0x%04x path='%s' fn=0x23 sub=0x%02x result=0x9c",
|
||||
afp_sub, requested_attrs,
|
||||
visable_data(path_data, path_len), afp_sub));
|
||||
return(-0x9c);
|
||||
}
|
||||
}
|
||||
@@ -2374,29 +2389,33 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
path_volume = afp_resolve_path_volume(path_data, path_len,
|
||||
unixname, sizeof(unixname));
|
||||
if (path_volume < 0) {
|
||||
XDPRINTF((2,0, "%s path resolve failed: request_vol=%d entry=0x%08x mask=0x%04x path='%s' result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len), -path_volume));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=path_resolve request_vol=%u entry=%lu mask=0x%04x path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len), afp_sub,
|
||||
request_entry_id, (unsigned int)(-path_volume)));
|
||||
return(path_volume);
|
||||
}
|
||||
}
|
||||
|
||||
if (stat(unixname, &stbuff)) {
|
||||
XDPRINTF((2,0, "%s stat failed: request_vol=%d resolved_vol=%d entry=0x%08x mask=0x%04x path='%s' unix='%s' errno=%d",
|
||||
call_name, (int)volume_number, path_volume, request_entry_id,
|
||||
request_mask, visable_data(path_data, path_len), unixname, errno));
|
||||
XDPRINTF((2,0, "WARN FILE 35/%d FAIL reason=stat request_vol=%u resolved_vol=%d entry=%lu mask=0x%04x path='%s' unix='%s' errno=%d fn=0x23 sub=0x%02x entry_hex=0x%08x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number, path_volume,
|
||||
(unsigned long)request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len), unixname, errno,
|
||||
afp_sub, request_entry_id));
|
||||
return(-0x9c);
|
||||
}
|
||||
if (S_ISDIR(stbuff.st_mode)) {
|
||||
XDPRINTF((2,0, "%s rejected: directory FinderInfo uses dir-specific semantics request_vol=%d resolved_vol=%d path='%s'",
|
||||
call_name, (int)volume_number, path_volume,
|
||||
visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=directory_metadata request_vol=%u resolved_vol=%d path='%s' fn=0x23 sub=0x%02x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number, path_volume,
|
||||
visable_data(path_data, path_len), afp_sub));
|
||||
return(-0x9c);
|
||||
}
|
||||
|
||||
if (needs_afp_metadata_modify) {
|
||||
result = afp_check_metadata_modify_rights(path_volume, unixname, &stbuff,
|
||||
call_name, path_data, path_len);
|
||||
afp_sub, path_data, path_len);
|
||||
if (result < 0)
|
||||
return(result);
|
||||
}
|
||||
@@ -2416,8 +2435,8 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
if (request_mask & AFP_FILE_BITMAP_ACCESS_DATE) {
|
||||
time_t new_atime = nw_2_un_time(access_data, access_data + 2);
|
||||
if (new_atime == (time_t)-1) {
|
||||
XDPRINTF((2,0, "%s rejected: invalid access timestamp path='%s'",
|
||||
call_name, visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=invalid_access_time path='%s' fn=0x23 sub=0x%02x result=0x8c",
|
||||
afp_sub, visable_data(path_data, path_len), afp_sub));
|
||||
return(-0x8c);
|
||||
}
|
||||
result = afp_set_access_time(path_volume, unixname, &stbuff, new_atime);
|
||||
@@ -2440,8 +2459,8 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
if (request_mask & AFP_FILE_BITMAP_MODIFY_DATE) {
|
||||
time_t new_mtime = nw_2_un_time(modify_data, modify_data + 2);
|
||||
if (new_mtime == (time_t)-1) {
|
||||
XDPRINTF((2,0, "%s rejected: invalid modify timestamp path='%s'",
|
||||
call_name, visable_data(path_data, path_len)));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=invalid_modify_time path='%s' fn=0x23 sub=0x%02x result=0x8c",
|
||||
afp_sub, visable_data(path_data, path_len), afp_sub));
|
||||
return(-0x8c);
|
||||
}
|
||||
result = nw_utime_node(path_volume, (uint8 *)unixname, &stbuff, new_mtime);
|
||||
@@ -2474,17 +2493,19 @@ static int afp_set_file_information(uint8 *afp_req, int afp_len,
|
||||
return(result);
|
||||
}
|
||||
|
||||
XDPRINTF((3,0, "%s: vol=%d request_vol=%d entry=0x%08x mask=0x%04x path='%s'%s%s%s%s%s%s%s attrs=0x%04x atime=%ld mtime=%ld",
|
||||
call_name, path_volume, (int)volume_number, request_entry_id,
|
||||
request_mask, visable_data(path_data, path_len),
|
||||
(request_mask & AFP_FILE_BITMAP_ATTRIBUTES) ? " attributes" : "",
|
||||
(request_mask & AFP_FILE_BITMAP_ACCESS_DATE) ? " access_time" : "",
|
||||
(request_mask & AFP_FILE_BITMAP_CREATE_DATE) ? " create_time" : "",
|
||||
(request_mask & AFP_FILE_BITMAP_MODIFY_DATE) ? " modify_time" : "",
|
||||
(request_mask & AFP_FILE_BITMAP_BACKUP_DATE) ? " backup_time" : "",
|
||||
(request_mask & AFP_FILE_BITMAP_FINDER_INFO) ? " finder_info" : "",
|
||||
(is_afp20 && afp_info_bytes_nonzero(prodos_data, NWATALK_PRODOS_INFO_LEN)) ? " prodos_info" : "",
|
||||
log_attrs, (long)log_atime, (long)log_mtime));
|
||||
XDPRINTF((3,0, "INFO AFP 35/%d DONE vol=%d request_vol=%u entry=%lu mask=0x%04x path='%s' fields='%s%s%s%s%s%s%s' attrs=0x%04x atime=%ld mtime=%ld fn=0x23 sub=0x%02x entry_hex=0x%08x",
|
||||
afp_sub, path_volume, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, request_mask,
|
||||
visable_data(path_data, path_len),
|
||||
(request_mask & AFP_FILE_BITMAP_ATTRIBUTES) ? "attributes " : "",
|
||||
(request_mask & AFP_FILE_BITMAP_ACCESS_DATE) ? "access_time " : "",
|
||||
(request_mask & AFP_FILE_BITMAP_CREATE_DATE) ? "create_time " : "",
|
||||
(request_mask & AFP_FILE_BITMAP_MODIFY_DATE) ? "modify_time " : "",
|
||||
(request_mask & AFP_FILE_BITMAP_BACKUP_DATE) ? "backup_time " : "",
|
||||
(request_mask & AFP_FILE_BITMAP_FINDER_INFO) ? "finder_info " : "",
|
||||
(is_afp20 && afp_info_bytes_nonzero(prodos_data, NWATALK_PRODOS_INFO_LEN)) ? "prodos_info" : "",
|
||||
log_attrs, (long)log_atime, (long)log_mtime,
|
||||
afp_sub, request_entry_id));
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -2508,6 +2529,7 @@ static int afp_scan_file_information(uint8 *afp_req, int afp_len,
|
||||
uint16 desired_count;
|
||||
uint16 search_mask;
|
||||
uint16 request_mask;
|
||||
int afp_sub = afp_req[0];
|
||||
int path_len;
|
||||
int path_off;
|
||||
int volume;
|
||||
@@ -2526,8 +2548,8 @@ static int afp_scan_file_information(uint8 *afp_req, int afp_len,
|
||||
int result;
|
||||
|
||||
if (afp_len < 17) {
|
||||
XDPRINTF((2,0, "%s rejected: short request len=%d",
|
||||
call_name, afp_len));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=short_request len=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, afp_sub));
|
||||
return(-0x7e); /* NCP Boundary Check Failed */
|
||||
}
|
||||
|
||||
@@ -2548,13 +2570,14 @@ static int afp_scan_file_information(uint8 *afp_req, int afp_len,
|
||||
path_off = 17;
|
||||
|
||||
if (path_len < 0 || afp_len < path_off + path_len) {
|
||||
XDPRINTF((2,0, "%s rejected: boundary check len=%d path_len=%d path_off=%d",
|
||||
call_name, afp_len, path_len, path_off));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=boundary_check len=%d path_len=%d path_off=%d fn=0x23 sub=0x%02x result=0x7e",
|
||||
afp_sub, afp_len, path_len, path_off, afp_sub));
|
||||
return(-0x7e);
|
||||
}
|
||||
|
||||
if (!nwatalk_backend_available()) {
|
||||
XDPRINTF((3,0, "%s rejected: AFP xattr metadata backend unavailable", call_name));
|
||||
XDPRINTF((3,0, "WARN AFP 35/%d REJECT reason=no_xattr_backend fn=0x23 sub=0x%02x result=0xbf",
|
||||
afp_sub, afp_sub));
|
||||
return(-0xbf); /* invalid namespace */
|
||||
}
|
||||
|
||||
@@ -2567,34 +2590,41 @@ static int afp_scan_file_information(uint8 *afp_req, int afp_len,
|
||||
resolved_path,
|
||||
sizeof(resolved_path));
|
||||
if (result < 0) {
|
||||
XDPRINTF((2,0, "%s entry-id path build failed: vol=%d entry=0x%08x last=0x%08x path='%s' result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id, last_seen_id,
|
||||
visable_data(afp_req + path_off, path_len), -result));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=entry_id_path_build vol=%u entry=%lu last=%lu path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x last_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, (unsigned long)last_seen_id,
|
||||
visable_data(afp_req + path_off, path_len), afp_sub,
|
||||
request_entry_id, last_seen_id, (unsigned int)(-result)));
|
||||
return(result);
|
||||
}
|
||||
scan_path_data = resolved_path;
|
||||
scan_path_len = result;
|
||||
} else if (!path_len) {
|
||||
XDPRINTF((2,0, "%s rejected: empty path without entry-id vol=%d last=0x%08x mask=0x%04x req=0x%04x",
|
||||
call_name, (int)volume_number, last_seen_id,
|
||||
search_mask, request_mask));
|
||||
XDPRINTF((2,0, "WARN AFP 35/%d REJECT reason=empty_path_without_entry_id vol=%u last=%lu search_mask=0x%04x req_mask=0x%04x fn=0x23 sub=0x%02x last_hex=0x%08x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)last_seen_id, search_mask, request_mask,
|
||||
afp_sub, last_seen_id));
|
||||
return(-0x9c); /* Invalid Path */
|
||||
}
|
||||
|
||||
volume = conn_get_kpl_unxname(unixname, sizeof(unixname), 0,
|
||||
scan_path_data, scan_path_len);
|
||||
if (volume < 0) {
|
||||
XDPRINTF((2,0, "%s path resolve failed: vol=%d entry=0x%08x last=0x%08x path='%s' result=-0x%x",
|
||||
call_name, (int)volume_number, request_entry_id, last_seen_id,
|
||||
visable_data(scan_path_data, scan_path_len), -volume));
|
||||
XDPRINTF((2,0, "WARN MAP 35/%d FAIL reason=path_resolve vol=%u entry=%lu last=%lu path='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x last_hex=0x%08x result=0x%02x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, (unsigned long)last_seen_id,
|
||||
visable_data(scan_path_data, scan_path_len), afp_sub,
|
||||
request_entry_id, last_seen_id, (unsigned int)(-volume)));
|
||||
return(volume);
|
||||
}
|
||||
|
||||
dir = opendir(unixname);
|
||||
if (!dir) {
|
||||
XDPRINTF((2,0, "%s opendir failed: vol=%d entry=0x%08x last=0x%08x path='%s' unix='%s' errno=%d",
|
||||
call_name, (int)volume_number, request_entry_id, last_seen_id,
|
||||
visable_data(scan_path_data, scan_path_len), unixname, errno));
|
||||
XDPRINTF((2,0, "WARN FILE 35/%d FAIL reason=opendir vol=%u entry=%lu last=%lu path='%s' unix='%s' errno=%d fn=0x23 sub=0x%02x entry_hex=0x%08x last_hex=0x%08x result=0x9c",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, (unsigned long)last_seen_id,
|
||||
visable_data(scan_path_data, scan_path_len), unixname, errno,
|
||||
afp_sub, request_entry_id, last_seen_id));
|
||||
return(-0x9c); /* Invalid Path */
|
||||
}
|
||||
|
||||
@@ -2637,20 +2667,25 @@ static int afp_scan_file_information(uint8 *afp_req, int afp_len,
|
||||
continue;
|
||||
U16_TO_BE16(1, response);
|
||||
closedir(dir);
|
||||
XDPRINTF((3,0, "%s: vol=%d entry=0x%08x last=0x%08x desired=%u mask=0x%04x req=0x%04x path='%s' count=1 reply_entry=0x%08x%s",
|
||||
call_name, (int)volume_number, request_entry_id, last_seen_id,
|
||||
XDPRINTF((3,0, "INFO AFP 35/%d DONE vol=%u entry=%lu last=%lu desired=%u search_mask=0x%04x req_mask=0x%04x path='%s' count=1 reply_entry=%lu mode='%s' fn=0x23 sub=0x%02x entry_hex=0x%08x last_hex=0x%08x reply_entry_hex=0x%08x",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, (unsigned long)last_seen_id,
|
||||
(unsigned)desired_count, search_mask, request_mask,
|
||||
visable_data(scan_path_data, scan_path_len),
|
||||
entry_id ? entry_id : child_entry_id,
|
||||
(fallback || child_fallback) ? " fallback" : ""));
|
||||
(unsigned long)(entry_id ? entry_id : child_entry_id),
|
||||
(fallback || child_fallback) ? "fallback" : "",
|
||||
afp_sub, request_entry_id, last_seen_id,
|
||||
entry_id ? entry_id : child_entry_id));
|
||||
return(2 + result);
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
XDPRINTF((3,0, "%s completed: vol=%d entry=0x%08x last=0x%08x desired=%u path='%s' no more entries",
|
||||
call_name, (int)volume_number, request_entry_id, last_seen_id,
|
||||
XDPRINTF((3,0, "INFO AFP 35/%d DONE vol=%u entry=%lu last=%lu desired=%u path='%s' count=0 status=no_more_entries fn=0x23 sub=0x%02x entry_hex=0x%08x last_hex=0x%08x result=0xff",
|
||||
afp_sub, (unsigned int)volume_number,
|
||||
(unsigned long)request_entry_id, (unsigned long)last_seen_id,
|
||||
(unsigned)desired_count,
|
||||
visable_data(scan_path_data, scan_path_len)));
|
||||
visable_data(scan_path_data, scan_path_len), afp_sub,
|
||||
request_entry_id, last_seen_id));
|
||||
return(-0xff); /* No files found / scan complete */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user