Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Get --socket-owner working. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | unix-sockets |
| Files: | files | file ages | folders |
| SHA3-256: |
efc7475e180bb40143773ffdc61a4577 |
| User & Date: | drh 2024-08-06 20:30:55.705 |
Context
|
2024-08-06
| ||
| 20:36 | Get the build working on Windows again. Closed-Leaf check-in: d474c95d5a user: drh tags: unix-sockets | |
| 20:30 | Get --socket-owner working. check-in: efc7475e18 user: drh tags: unix-sockets | |
| 17:22 | Changed a fatal error message speaking of the TCP socket's port number in a call to a function that may now use a Unix socket instead. check-in: 28de3fab86 user: wyoung tags: unix-sockets | |
Changes
Changes to src/cgi.c.
| ︙ | ︙ | |||
2546 2547 2548 2549 2550 2551 2552 |
strncpy(uxaddr.sun_path, g.zSockName, sizeof(uxaddr.sun_path)-1);
listener = socket(AF_UNIX, SOCK_STREAM, 0);
if( listener<0 ){
fossil_fatal("unable to create a unix socket named %s",
g.zSockName);
}
/* Set the access permission for the new socket. Default to 0660.
| | > < < < < | 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 |
strncpy(uxaddr.sun_path, g.zSockName, sizeof(uxaddr.sun_path)-1);
listener = socket(AF_UNIX, SOCK_STREAM, 0);
if( listener<0 ){
fossil_fatal("unable to create a unix socket named %s",
g.zSockName);
}
/* Set the access permission for the new socket. Default to 0660.
** But use an alternative specified by --socket-mode if available.
** Do this before bind() to avoid a race condition. */
if( g.zSockMode ){
file_set_mode(g.zSockName, listener, g.zSockMode, 0);
}else{
file_set_mode(g.zSockName, listener, "0660", 1);
}
}else{
/* Initialize a TCP/IP socket on port iPort */
memset(&inaddr, 0, sizeof(inaddr));
inaddr.sin_family = AF_INET;
if( zIpAddr ){
inaddr.sin_addr.s_addr = inet_addr(zIpAddr);
if( inaddr.sin_addr.s_addr == INADDR_NONE ){
|
| ︙ | ︙ | |||
2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 |
}
/* if we can't terminate nicely, at least allow the socket to be reused */
setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if( flags & HTTP_SERVER_UNIXSOCKET ){
rc = bind(listener, (struct sockaddr*)&uxaddr, sizeof(uxaddr));
}else{
rc = bind(listener, (struct sockaddr*)&inaddr, sizeof(inaddr));
}
if( rc<0 ){
close(listener);
iPort++;
continue;
| > > > > > > > | 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 |
}
/* if we can't terminate nicely, at least allow the socket to be reused */
setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if( flags & HTTP_SERVER_UNIXSOCKET ){
rc = bind(listener, (struct sockaddr*)&uxaddr, sizeof(uxaddr));
/* Set the owner of the socket if requested by --socket-owner. This
** must wait until after bind(), after the filesystem object has been
** created. See https://lkml.org/lkml/2004/11/1/84 and
** https://fossil-scm.org/forum/forumpost/7517680ef9684c57 */
if( g.zSockOwner ){
file_set_owner(g.zSockName, listener, g.zSockOwner);
}
}else{
rc = bind(listener, (struct sockaddr*)&inaddr, sizeof(inaddr));
}
if( rc<0 ){
close(listener);
iPort++;
continue;
|
| ︙ | ︙ | |||
2606 2607 2608 2609 2610 2611 2612 |
fossil_fatal("unable to open listening socket on any"
" port in the range %d..%d", mnPort, mxPort);
}
}
if( iPort>mxPort ) return 1;
listen(listener,10);
if( flags & HTTP_SERVER_UNIXSOCKET ){
| | | | 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 |
fossil_fatal("unable to open listening socket on any"
" port in the range %d..%d", mnPort, mxPort);
}
}
if( iPort>mxPort ) return 1;
listen(listener,10);
if( flags & HTTP_SERVER_UNIXSOCKET ){
fossil_print("Listening for %s requests on unix socket %s\n",
(flags & HTTP_SERVER_SCGI)!=0 ? "SCGI" :
g.httpUseSSL?"TLS-encrypted HTTPS":"HTTP", g.zSockName);
}else{
fossil_print("Listening for %s requests on TCP port %d\n",
(flags & HTTP_SERVER_SCGI)!=0 ? "SCGI" :
g.httpUseSSL?"TLS-encrypted HTTPS":"HTTP", iPort);
}
fflush(stdout);
if( zBrowser && (flags & HTTP_SERVER_UNIXSOCKET)==0 ){
|
| ︙ | ︙ |
Changes to src/file.c.
| ︙ | ︙ | |||
765 766 767 768 769 770 771 |
if( zGrp ){
grp = getgrnam(zGrp);
if( grp==0 ){
fossil_fatal("no such group: \"%s\"", zGrp);
}
gid = grp->gr_gid;
}
| < | | 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 |
if( zGrp ){
grp = getgrnam(zGrp);
if( grp==0 ){
fossil_fatal("no such group: \"%s\"", zGrp);
}
gid = grp->gr_gid;
}
if( chown(zFN, uid, gid) ){
fossil_fatal("cannot change ownership of %s to %s",zFN, zOwner);
}
if( zOwner!=zUsr ){
fossil_free((char*)zUsr);
}
}
|
| ︙ | ︙ |