On Wed, Sep 13, 2023 at 03:08:40PM +0200, Moritz Fain wrote:
> Most of the code is already there; it's basically just adding a new flag.
> 
> Happy to hear your feedback!

My initial reaction is that it's easy to run "rm -f" before starting
the agent with the existing "-a" option.

The code seems to use a new variable that should be called "A_flag" if
it's to follow the existing naming scheme.

> 
> ---------------
> diff --git a/usr.bin/ssh/ssh-agent.1 b/usr.bin/ssh/ssh-agent.1
> index 6815eb834d3..731a1cf913d 100644
> --- a/usr.bin/ssh/ssh-agent.1
> +++ b/usr.bin/ssh/ssh-agent.1
> @@ -76,6 +76,10 @@ socket
>  .Ar bind_address .
>  The default is
>  .Pa $TMPDIR/ssh-XXXXXXXXXX/agent.\*(Ltppid\*(Gt .
> +.It Fl A Ar bind_address
> +Same as the
> +.Fl a
> +option but overwrites the socket if it already exists.
>  .It Fl c
>  Generate C-shell commands on
>  .Dv stdout .
> diff --git a/usr.bin/ssh/ssh-agent.c b/usr.bin/ssh/ssh-agent.c
> index 0b2ee971226..5e9c3affec8 100644
> --- a/usr.bin/ssh/ssh-agent.c
> +++ b/usr.bin/ssh/ssh-agent.c
> @@ -2003,7 +2003,7 @@ usage(void)
>  int
>  main(int ac, char **av)
>  {
> -       int c_flag = 0, d_flag = 0, D_flag = 0, k_flag = 0, s_flag = 0;
> +       int c_flag = 0, d_flag = 0, D_flag = 0, k_flag = 0, s_flag =
> 0, overwrite_agentsocket = 0;
>         int sock, ch, result, saved_errno;
>         char *shell, *format, *pidstr, *agentsocket = NULL;
>         struct rlimit rlim;
> @@ -2032,7 +2032,7 @@ main(int ac, char **av)
>         OpenSSL_add_all_algorithms();
>  #endif
> 
> -       while ((ch = getopt(ac, av, "cDdksE:a:O:P:t:")) != -1) {
> +       while ((ch = getopt(ac, av, "cDdksE:a:A:O:P:t:")) != -1) {
>                 switch (ch) {
>                 case 'E':
>                         fingerprint_hash = ssh_digest_alg_by_name(optarg);
> @@ -2075,6 +2075,8 @@ main(int ac, char **av)
>                                 usage();
>                         D_flag++;
>                         break;
> +               case 'A':
> +                       overwrite_agentsocket = 1;
>                 case 'a':
>                         agentsocket = optarg;
>                         break;
> @@ -2163,7 +2165,7 @@ main(int ac, char **av)
>          * the parent.
>          */
>         prev_mask = umask(0177);
> -       sock = unix_listener(socket_name, SSH_LISTEN_BACKLOG, 0);
> +       sock = unix_listener(socket_name, SSH_LISTEN_BACKLOG,
> overwrite_agentsocket);
>         if (sock < 0) {
>                 /* XXX - unix_listener() calls error() not perror() */
>                 *socket_name = '\0'; /* Don't unlink any existing file */

-- 
Andreas (Kusalananda) Kähäri
Uppsala, Sweden

.

Reply via email to