summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 13:20:43 -0500
committerLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 13:21:38 -0500
commit643cd143070d779d4697ef7eeecd3dbf5f5e24ff (patch)
tree6da2239154ec7dba569e9039479a44b015c44631
parent549843228517e1d72840e18caf369d211623dddb (diff)
nslcd_server: respect all values if limits.Timeout < limits.ReadTimeout + limits.WriteTimeout
If Timeout : 3s ReadTimeout : 2s WriteTimeout : 2s Then before the effective total Timeout was 2s+2s=4s. That is wrong. It should only be that the Write phase gets to use the full 2s if the Read phase uses <= 1s.
-rwxr-xr-xnslcd_server/func_handlerequest.go.gen24
1 files changed, 18 insertions, 6 deletions
diff --git a/nslcd_server/func_handlerequest.go.gen b/nslcd_server/func_handlerequest.go.gen
index 7c28e7c..00e9663 100755
--- a/nslcd_server/func_handlerequest.go.gen
+++ b/nslcd_server/func_handlerequest.go.gen
@@ -84,14 +84,20 @@ func HandleRequest(backend Backend, limits Limits, conn Conn, cred unix.Ucred) (
}()
now := time.Now()
+ deadlineAll := time.Time{}
+ deadlineRead := time.Time{}
if limits.Timeout != 0 {
- err = conn.SetDeadline(now.Add(limits.Timeout))
- if err != nil {
- return err
- }
+ deadlineAll = now.Add(limits.Timeout)
}
if limits.ReadTimeout != 0 {
- err = conn.SetReadDeadline(now.Add(limits.ReadTimeout))
+ deadlineRead = now.Add(limits.ReadTimeout)
+ if !deadlineAll.IsZero() && deadlineAll.Before(deadlineRead) {
+ deadlineRead = deadlineAll
+ }
+ }
+ deadlineWrite := deadlineAll
+ if !deadlineRead.IsZero() {
+ err = conn.SetReadDeadline(deadlineRead)
if err != nil {
return err
}
@@ -144,7 +150,13 @@ while read -r request; do
esac
)
if limits.WriteTimeout != 0 {
- err = out.SetWriteDeadline(time.Now().Add(limits.WriteTimeout))
+ deadlineWrite = time.Now().Add(limits.WriteTimeout)
+ if !deadlineAll.IsZero() && deadlineAll.Before(deadlineWrite) {
+ deadlineWrite = deadlineAll
+ }
+ }
+ if !deadlineWrite.IsZero() {
+ err = out.SetWriteDeadline(deadlineWrite)
if err != nil {
return err
}