- printf("SSH_AUTH_SOCK=%s; export SSH_AUTH_SOCK;\n"
- "SSH_AGENT_PID=%d; export SSH_AGENT_PID;\n",
- socketname, (int)pid);
+ if (shell_type == SHELL_AUTO) {
+ /* Same policy as OpenSSH: if $SHELL ends in "csh" then assume
+ * it's csh-shaped. */
+ const char *shell = getenv("SHELL");
+ if (shell && strlen(shell) >= 3 &&
+ !strcmp(shell + strlen(shell) - 3, "csh"))
+ shell_type = SHELL_CSH;
+ else
+ shell_type = SHELL_SH;
+ }
+
+ /*
+ * These shell snippets could usefully pay some attention to
+ * escaping of interesting characters. I don't think it causes a
+ * problem at the moment, because the pathnames we use are so
+ * utterly boring, but it's a lurking bug waiting to happen once
+ * a bit more flexibility turns up.
+ */
+
+ switch (shell_type) {
+ case SHELL_SH:
+ printf("SSH_AUTH_SOCK=%s; export SSH_AUTH_SOCK;\n"
+ "SSH_AGENT_PID=%d; export SSH_AGENT_PID;\n",
+ socketname, pid);
+ break;
+ case SHELL_CSH:
+ printf("setenv SSH_AUTH_SOCK %s;\n"
+ "setenv SSH_AGENT_PID %d;\n",
+ socketname, pid);
+ break;
+ case SHELL_AUTO:
+ assert(0 && "Can't get here");
+ break;
+ }