I see writePacket again uses ioSession.write() method internally.
Currently in our code with ServerSession.writePacket , we didn't see
UnsupportedOperationException as our code doesn't reach up to that step and
something goes wrong before that step itself.

However, as the ServerSession.writePacket() path is still the same (using
ioSession.write() ) , ioSession.write would again throw
UnsupportedOperationException
for our TransportMetaDataType being not connectionless .

Is there any other API apart from ServerSesison.writePacket or
IoSesison.write() ? Or any other way ?

Thanks,
Kanupriya

On Fri, Sep 7, 2012 at 6:36 PM, Guillaume Nodet <[email protected]> wrote:

> You should look for informations on keyboard-interactive authentication in
> SSH.
> I think that's exactly what you want.  I suppose you'll need to implement
> your own UserAuth implementation.
> I think messages can be sent by the server using SSH_MSG_USERAUTH_BANNER
> (for simply displaying a message) and SSH_MSG_USERAUTH_INFO_REQUEST
> / SSH_MSG_USERAUTH_INFO_RESPONSE for having the server requesting
> information on the client side.
> Note that the client side of sshd does not support that yet, but that part
> could be included as it should be reusable (the server side might be less
> reusable).
>
> On Fri, Sep 7, 2012 at 2:48 PM, Khan, Farooq <[email protected]> wrote:
>
> > Let me explain the problem a bit more.
> >
> > Within our MinaServer class we have the following code
> >
> > setPasswordAuthenticator(new PasswordAuthenticator() {
> >   public boolean authenticate(String username, String password,
> > ServerSession session) {
> >
> >   }
> > }
> >
> > Our PasswordAuthenticator::authenticate() method further delegates the
> > actually authentication task to a custom JAASLoginModule. We could have
> > used the Mina provided JaasPasswordAuthenticator however we had our own
> > class already written years ago so we decided to reuse that.
> >
> > There is one problem with all this approach the JAAS Framework depends on
> > Callbacks which are used to prompt the user appropriately. However Mina
> SSH
> > framework does all prompting in the background and simply provides you
> with
> > a username and password. We then have to forward this to our JAAS Login
> > Module.
> >
> > This works for most cases however sometimes our custom authentication
> > system throws up a TextCallBack there is no way with Mina to achieve
> this.
> > If you want to prompt the user to choose a "Domain Name" using a
> > ChoiceCallback this is also not possible with Mina.
> >
> > Kanupriya was basically trying to use the ServerSession object within the
> > authenticate method to send back a custom message to the user. A message
> > that was being prompted by the TextCallBack
> >
> > In order to send this message she wrote a method similar to below
> >
> > private void sendMessage(ServerSession serverSession,
> SshConstants.Message
> > cmd, String msg){
> >     Buffer buffer = serverSession.createBuffer(cmd, msg.length());
> >     buffer.putString(msg);
> >     log.info("Buffer created now");
> >     try {
> >       log.info("writing message now");
> >       WriteFuture writeFuture = serverSession.writePacket(buffer);
> >       log.info("message is written now waiting");
> >       writeFuture.awaitUninterruptibly(); // Wait until the message is
> > completely written out to the O/S buffer.
> >       Thread.sleep(10000);
> >       log.info("waiting and sleeping done");
> >     } catch (Exception ioe) {
> >       ioe.printStackTrace();
> >     }
> >   }
> >
> > For the SshConstants.Message she tried the following:
> > SshConstants.Message.SSH_MSG_DEBUG
> > SshConstants.Message.SSH_MSG_USERAUTH_FAILURE
> >
> > But none of these reach the user.
> >
> > I think there is a workaround to this entire stuff but I was hoping we
> > avoided that it would be quite a bit of coding to do that.
> > 1. Somehow disable authentication the way it is expected.
> > 2. Once the users session is established use the JAAS Login Module we
> > have. We have full control on what to prompt the user with and how many
> > prompts to do . We have a use case to inform user that the password will
> > expire shortly would the user like to change it. Or if it's a first time
> > login force the user to reset his password
> > 3. On failure somehow send back a
> > SshConstants.Message.SSH_MSG_USERAUTH_FAILURE
> >
> > Any better ideas?
> >
> > Thanks
> > Farooq
> >
> > > -----Original Message-----
> > > From: Kanupriya Dadariya [mailto:[email protected]]
> > > Sent: Thursday, September 06, 2012 7:56 PM
> > > To: [email protected]
> > > Subject: Re: how to display messages at client terminal
> > >
> > > Would like to know if there a proper way to communicate with the
> terminal
> > > before the session actually starts.
> > >
> > >
> > >
> > > On Wed, Sep 5, 2012 at 7:47 PM, Kanupriya Dadariya <
> > > [email protected]> wrote:
> > >
> > > > Hi,
> > > >
> > > > The requirement is not just display the message but also prompt for
> > > > user input.
> > > > For ex: If when the prompt to change the password comes from the
> > > > Authentication service.
> > > >
> > > > I think , we should be using SSH_MSG_USERAUTH_FAILURE in this case.
> > > >
> > > > However, that doesn't help and I see the writeStatus as false without
> > > > any exception.
> > > >
> > > >
> > > > On Wed, Sep 5, 2012 at 12:50 PM, Kanupriya Dadariya <
> > > > [email protected]> wrote:
> > > >
> > > >> Thanks for the response . Will check with this.
> > > >>
> > > >>
> > > >> On Tue, Sep 4, 2012 at 7:09 PM, Guillaume Nodet <[email protected]>
> > > wrote:
> > > >>
> > > >>> There is the SSH_MSG_DEBUG message though which is logged by the
> > > >>> client/server upon reception.
> > > >>>
> > > >>> On Fri, Aug 31, 2012 at 3:42 PM, Kanupriya Dadariya <
> > > >>> [email protected]> wrote:
> > > >>>
> > > >>> > Hi,
> > > >>> >
> > > >>> > I am using Apache Mina sshd . Do not have my own encoder/decoder.
> > > >>> > Need
> > > >>> to
> > > >>> > display the message to client terminal during authentication .
> > > >>> >
> > > >>> > Probably making some obvious mistake , Can somebody please help
> > > me
> > > >>> > out
> > > >>> ?
> > > >>> >
> > > >>> > Here is the code snippet : I get the writeStatus as false always
> > > >>> > and
> > > >>> don't
> > > >>> > get the message displayed .
> > > >>> >
> > > >>> > =============================
> > > >>> > IoBuffer buffer = IoBuffer.allocate(1024, true);
> > > >>> >     buffer.setAutoExpand(true);
> > > >>> >     try {
> > > >>> >       buffer.putString("small",
> > > >>> > Charset.forName("UTF-8").newEncoder());
> > > >>> >
> > > >>> >     } catch (CharacterCodingException e) {
> > > >>> >
> > > >>> >     }
> > > >>> >
> > > >>> >     WriteFuture future = ioSession.write(buffer,
> > > >>> > ioSession.getRemoteAddress());
> > > >>> >     IoFutureListener iof = new MinaIOFutureListener();
> > > >>> >     future.addListener(iof);
> > > >>> >
> > > >>> >     if(future.isWritten()){
> > > >>> >       writeStatus = true;
> > > >>> >     } else {
> > > >>> >       writeStatus = false;
> > > >>> >     }
> > > >>> >     future.removeListener(iof);
> > > >>> > =================================
> > > >>> > Appreciate any help .
> > > >>> >
> > > >>>
> > > >>>
> > > >>>
> > > >>> --
> > > >>> ------------------------
> > > >>> Guillaume Nodet
> > > >>> ------------------------
> > > >>> Blog: http://gnodet.blogspot.com/
> > > >>> ------------------------
> > > >>> FuseSource, Integration everywhere
> > > >>> http://fusesource.com
> > > >>>
> > > >>
> > > >>
> > > >
> >
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> FuseSource, Integration everywhere
> http://fusesource.com
>

Reply via email to