proj: Add meaningful return value for getaddrinfo
This commit is contained in:
@@ -459,7 +459,7 @@ static void set_errno(const char *name, const char *msg_buf) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *getdomainstr(int domain) {
|
static const char *getdomainstr(const int domain) {
|
||||||
switch (domain) {
|
switch (domain) {
|
||||||
case_const(AF_UNSPEC);
|
case_const(AF_UNSPEC);
|
||||||
case_const(AF_UNIX);
|
case_const(AF_UNIX);
|
||||||
@@ -469,7 +469,7 @@ static const char *getdomainstr(int domain) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *getsocktype(int type) {
|
static const char *getsocktype(const int type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case_const(SOCK_STREAM);
|
case_const(SOCK_STREAM);
|
||||||
case_const(SOCK_DGRAM);
|
case_const(SOCK_DGRAM);
|
||||||
@@ -482,6 +482,31 @@ static const char *getsocktype(int type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *getaddrinfoerror(const int ret) {
|
||||||
|
switch (ret) {
|
||||||
|
case 0: return "SUCCESS";
|
||||||
|
case_const(EAI_BADFLAGS);
|
||||||
|
case_const(EAI_NONAME);
|
||||||
|
case_const(EAI_AGAIN);
|
||||||
|
case_const(EAI_FAIL);
|
||||||
|
case_const(EAI_NODATA);
|
||||||
|
case_const(EAI_FAMILY);
|
||||||
|
case_const(EAI_SOCKTYPE);
|
||||||
|
case_const(EAI_SERVICE);
|
||||||
|
case_const(EAI_ADDRFAMILY);
|
||||||
|
case_const(EAI_MEMORY);
|
||||||
|
case_const(EAI_SYSTEM);
|
||||||
|
case_const(EAI_OVERFLOW);
|
||||||
|
case_const(EAI_INPROGRESS);
|
||||||
|
case_const(EAI_CANCELED);
|
||||||
|
case_const(EAI_NOTCANCELED);
|
||||||
|
case_const(EAI_ALLDONE);
|
||||||
|
case_const(EAI_INTR);
|
||||||
|
case_const(EAI_IDN_ENCODE);
|
||||||
|
default: return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static char *strtostr(char *ptr, char **end_ptr, char *buf) {
|
static char *strtostr(char *ptr, char **end_ptr, char *buf) {
|
||||||
if (ptr[0] != '"') return NULL;
|
if (ptr[0] != '"') return NULL;
|
||||||
int i = 0, esc = 0, hex = 0;
|
int i = 0, esc = 0, hex = 0;
|
||||||
@@ -2287,15 +2312,52 @@ int sym(getaddrinfo)(const char *restrict node, const char *restrict service, co
|
|||||||
if (strncmp(msg_buf, "modify ", 7) == 0) {
|
if (strncmp(msg_buf, "modify ", 7) == 0) {
|
||||||
// TODO getaddrinfo modify
|
// TODO getaddrinfo modify
|
||||||
fprintf(stderr, "intercept: %s: modify command not implemented\n", "getaddrinfo");
|
fprintf(stderr, "intercept: %s: modify command not implemented\n", "getaddrinfo");
|
||||||
} else if_return_int_errno(getaddrinfo)
|
} else if (strncmp(msg_buf, "return ", 7) == 0) {
|
||||||
else if_fail_int_errno(getaddrinfo)
|
char *end_ptr = NULL;
|
||||||
else if_invalid(getaddrinfo)
|
long val = strtol(msg_buf + 7, &end_ptr, 0);
|
||||||
|
if (end_ptr != NULL && end_ptr[0] == 0 && end_ptr != msg_buf + 7) {
|
||||||
|
msg("return %i:%s; errno %s", val, getaddrinfoerror(val), strerrorname_np(errno));
|
||||||
|
return val;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "intercept: %s: invalid args in return command: '%s'\n", "getaddrinfo", msg_buf + 7);
|
||||||
|
}
|
||||||
|
} else if_fail {
|
||||||
|
int ret = -1;
|
||||||
|
if (strcmp(msg_buf + 5, "EAI_ADDRFAMILY") == 0) {
|
||||||
|
ret = EAI_ADDRFAMILY;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_AGAIN") == 0) {
|
||||||
|
ret = EAI_AGAIN;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_BADFLAGS") == 0) {
|
||||||
|
ret = EAI_BADFLAGS;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_FAIL") == 0) {
|
||||||
|
ret = EAI_FAIL;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_FAMILY") == 0) {
|
||||||
|
ret = EAI_FAMILY;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_MEMORY") == 0) {
|
||||||
|
ret = EAI_MEMORY;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_NODATA") == 0) {
|
||||||
|
ret = EAI_NODATA;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_NONAME") == 0) {
|
||||||
|
ret = EAI_NONAME;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_SERVICE") == 0) {
|
||||||
|
ret = EAI_SERVICE;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_SOCKTYPE") == 0) {
|
||||||
|
ret = EAI_SOCKTYPE;
|
||||||
|
} else if (strcmp(msg_buf + 5, "EAI_SYSTEM") == 0) {
|
||||||
|
ret = EAI_SYSTEM;
|
||||||
|
} else {
|
||||||
|
ret = EAI_SYSTEM;
|
||||||
|
set_errno("getaddrinfo", msg_buf);
|
||||||
|
}
|
||||||
|
msg("return %i:%s; errno %s", ret, getaddrinfoerror(ret), strerrorname_np(errno));
|
||||||
|
return ret;
|
||||||
|
} else if_invalid(getaddrinfo)
|
||||||
}
|
}
|
||||||
const int ret = __real_getaddrinfo(node, service, hints, res);
|
const int ret = __real_getaddrinfo(node, service, hints, res);
|
||||||
if (res != NULL) {
|
if (res != NULL) {
|
||||||
msg("return %i; errno %s; res=%qi", ret, strerrorname_np(errno), *res);
|
msg("return %i:%s; res=%qi", ret, getaddrinfoerror(ret), *res);
|
||||||
} else {
|
} else {
|
||||||
msg("return %i; errno %s", ret, strerrorname_np(errno));
|
msg("return %i:%s", ret, getaddrinfoerror(ret));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -486,7 +486,7 @@ class Handler(StreamRequestHandler):
|
|||||||
def before_getaddrinfo(self, node: PointerTo[bytes], service: PointerTo[bytes], hints: PointerTo[list[StructAddrInfo]], res_ptr: Pointer) -> str:
|
def before_getaddrinfo(self, node: PointerTo[bytes], service: PointerTo[bytes], hints: PointerTo[list[StructAddrInfo]], res_ptr: Pointer) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
def after_getaddrinfo(self, node: PointerTo[bytes], service: PointerTo[bytes], hints: PointerTo[list[StructAddrInfo]], res_ptr: Pointer,
|
def after_getaddrinfo(self, node: PointerTo[bytes], service: PointerTo[bytes], hints: PointerTo[list[StructAddrInfo]], res_ptr: Pointer,
|
||||||
ret_value: int, errno: str = None, res: PointerTo[list[StructAddrInfo]] = None) -> None:
|
ret_value: Constant, errno: str = None, res: PointerTo[list[StructAddrInfo]] = None) -> None:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
def before_freeaddrinfo(self, res: Pointer) -> str:
|
def before_freeaddrinfo(self, res: Pointer) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|||||||
Reference in New Issue
Block a user